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; } }
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);
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)); }
static TreeEnumerable <Node, TreeEnumerator, Node> Enumerate(Node root, TreeEnumerationMode mode, int skip = 0) { return(Enumerate(root, mode, skip, new TreeQuery <Node>())); }