public VisualTreeEnumerable(DependencyObject obj, int?childLevelLimit, bool includeCurrent, TreeEnumerationMode mode)
 {
     _obj             = obj;
     _childLevelLimit = childLevelLimit;
     _includeCurrent  = includeCurrent;
     _mode            = mode;
 }
        internal TreeEnumerator(Node root, TreeEnumerationMode mode)
        {
            Mode    = mode;
            Root    = root;
            Stack   = null;
            Queue   = null;
            Index   = -1;
            Current = null;
            Next    = null;

            switch (Mode)
            {
            case TreeEnumerationMode.DescendBF:
                Queue = Queues.Get();
                Queue.Clear();
                Queue.Enqueue(Root);
                break;

            case TreeEnumerationMode.DescendDF:
                Stack = Stacks.Get();
                Stack.Clear();
                Stack.Push(Root);
                break;

            case TreeEnumerationMode.Children:
                break;

            default:
                Next = root;
                break;
            }
        }
Beispiel #3
0
        private async Task TestGetAllChildren(
            int?childLevelLimit,
            bool includeCurrent,
            TreeEnumerationMode mode,
            params string[] expected)
        {
            var tree = BuildTestTree();

            TestServices.WindowHelper.WindowContent = tree;
            await TestServices.WindowHelper.WaitForIdle();

            Validate(expected, tree.GetAllChildren(childLevelLimit, includeCurrent, mode));
        }
 /// <summary>
 /// **Recursively** get all children of the given DependencyObject
 /// </summary>
 public static IEnumerable <DependencyObject> GetAllChildren(
     this DependencyObject obj,
     int?childLevelLimit      = null,
     bool includeCurrent      = false,
     TreeEnumerationMode mode = TreeEnumerationMode.Branch)
 => new VisualTreeEnumerable(obj, childLevelLimit, includeCurrent, mode);
Beispiel #5
0
 static TreeEnumerable <Node, TreeEnumerator, Node> Enumerate(Node root, TreeEnumerationMode mode,
                                                              int skip, TreeQuery <Node> query)
 {
     return(new TreeEnumerable <Node, TreeEnumerator, Node>(new TreeEnumerator(root, mode), skip, query));
 }
Beispiel #6
0
 static TreeEnumerable <Node, TreeEnumerator, Node> Enumerate(Node root, TreeEnumerationMode mode,
                                                              int skip = 0)
 {
     return(Enumerate(root, mode, skip, new TreeQuery <Node>()));
 }