public bool FocusOnNode(IDurable focusRange) { if (focusRange == null) { return(false); } if (EventTreeView == null) { return(false); } if (EventTreeView.ItemsSource == null) { return(false); } List <BaseTreeNode> treePath = new List <BaseTreeNode>(); foreach (var node in EventTreeView.ItemsSource) { BaseTreeNode baseTreeNode = node as BaseTreeNode; if (baseTreeNode == null) { continue; } baseTreeNode.ForEach((curNode, level) => { EventNode treeEventNode = curNode as EventNode; if (treeEventNode == null) { return(true); } if (treeEventNode.Entry.Start > focusRange.Finish) { return(false); } if (treeEventNode.Entry.Contains(focusRange)) { treePath.Add(curNode); //find desired node in tree if (treeEventNode.Entry.Start >= focusRange.Start && treeEventNode.Entry.Finish <= focusRange.Finish) { return(false); } } return(true); }); ItemsControl root = EventTreeView; int pathElementsCount = treePath.Count; if (pathElementsCount > 0) { //expand path in tree int index = 0; for (index = 0; index < (pathElementsCount - 1); index++) { BaseTreeNode expandNode = treePath[index]; if (root != null) { root = root.ItemContainerGenerator.ContainerFromItem(expandNode) as ItemsControl; } treePath[index].IsExpanded = true; } BaseTreeNode finalNode = treePath[index]; // select target node finalNode.IsExpanded = false; finalNode.IsSelected = true; // focus on finalNode if (root != null) { root = root.ItemContainerGenerator.ContainerFromItem(finalNode) as ItemsControl; if (root != null) { root.BringIntoView(); } } EventTreeView.InvalidateVisual(); return(true); } } return(false); }
//------------------------------------------------------------------------/ // Messages //------------------------------------------------------------------------/ protected override void OnWindowEnable() { this.treeView = new EventTreeView(this.treeViewState, this.BuildEventTree()); }