private void OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> args) { OutlineTreeViewItem item = (OutlineTreeViewItem)args.NewValue; if (args.Handled != true && item != null && item.Destination != null && controller.IsOpen)//that can happen when its not loaded yet and its only a stub { controller.SetDestination(item.Destination); args.Handled = true; } }
/// <summary> /// Add the outlineItems from enumerator-List to the parent /// </summary> /// <param name="parent"></param> /// <param name="enumerator"></param> /// <returns>Whether the enumerator has reached the end of the collection</returns> private bool recursivelyAddOutlines(ItemsControl parent, IEnumerator <PdfOutlineItem> enumerator) { PdfOutlineItem outlineItem; while (true) { outlineItem = enumerator.Current; OutlineTreeViewItem treeViewItem = new OutlineTreeViewItem(outlineItem, controller); parent.Items.Add(treeViewItem); if (!enumerator.MoveNext()) { return(true); } if (outlineItem.descendants) { if (enumerator.Current.level <= outlineItem.level) { //the child is not loaded yet. insert a stub treeViewItem.Items.Add(new OutlineTreeViewItem(controller)); } else { treeViewItem.ExpandSubtree(); if (recursivelyAddOutlines(treeViewItem, enumerator)) { return(true); } } } if (enumerator.Current.level < outlineItem.level) { return(false); } } }