Esempio n. 1
0
        private Node GetRelativeSource(Node target)
        {
            Node source = null;

            switch (RelativeSourceMode)
            {
                case RelativeSourceMode.Self:
                    source = target.Parent;
                    break;
                case RelativeSourceMode.FindAncestor:
                case RelativeSourceMode.SerializationContext:
                    source = FindAncestor(target);
                    break;
                case RelativeSourceMode.PreviousData:
                    throw new NotImplementedException();
            }

            return source;
        }
Esempio n. 2
0
 protected Node(Node parent)
 {
     Parent = parent;
     TargetBindings = new List<Func<object>>();
 }
Esempio n. 3
0
        private Node FindAncestor(Node target)
        {
            int level = 1;
            Node parent = target.Parent;
            while (parent != null)
            {
                if (level == Level)
                    return parent;

                if (parent.Parent == null && RelativeSourceMode == RelativeSourceMode.SerializationContext)
                    return parent;

                parent = parent.Parent;

                if (!(parent is ContextValueNode))
                    level++;
            }

            return null;
        }