private void TreeViewItem_Expanded(object sender, RoutedEventArgs e) { try { TreeViewItem item = e.Source as TreeViewItem; if ((item.Items.Count == 1) && (item.Items[0] is int)) { TreeViewItemTag tag = (TreeViewItemTag)item.Tag; IResultTreeItem resultTreeItem = tag.ResultTreeItem; int level = tag.Level; TreeViewItem lastItem = null; item.Items.Clear(); foreach (var child in resultTreeItem.Children.OrderBy(s => s.Name.StartsWith("[")).ThenBy(s => s.Name)) { item.Items.Add(lastItem = CreateTreeItem(child, level + 1)); } // Check if we need to fix empty list item width if (lastItem != null && double.IsNaN(emptyListItem.Width)) { item.Dispatcher.BeginInvoke(new Action(() => { emptyListItem.Width = item.ActualWidth - lastItem.ActualWidth; }), System.Windows.Threading.DispatcherPriority.Background); } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
private void TreeViewItem_Expanded(object sender, RoutedEventArgs e) { try { TreeViewItem item = e.Source as TreeViewItem; TreeListView tree = null; FrameworkElement parent = item?.Parent as FrameworkElement; while (tree == null && parent != null) { tree = parent as TreeListView; parent = parent.Parent as FrameworkElement; } if ((item.Items.Count == 1) && (item.Items[0].ToString() == ExpandingItemText)) { TreeViewItemTag tag = item.Tag as TreeViewItemTag; System.Threading.Tasks.Task.Run(() => { IResultVisualizer resultTreeItem = tag.ResultTreeItem as IResultVisualizer; IEnumerable <IResultVisualizer> children = tag.ResultTreeItem as IEnumerable <IResultVisualizer>; try { if (resultTreeItem != null) { List <Tuple <string, IEnumerable <IResultVisualizer> > > customChildren = new List <Tuple <string, IEnumerable <IResultVisualizer> > >(); foreach (Tuple <string, IEnumerable <IResultVisualizer> > customChild in resultTreeItem.Children) { if (customChild.Item2.Any()) { if (customChild.Item1 == "[Expanded]") { List <IResultVisualizer> cachedItems = customChild.Item2.ToList(); customChildren.Add(Tuple.Create(customChild.Item1, (IEnumerable <IResultVisualizer>)cachedItems)); foreach (IResultVisualizer child in cachedItems) { child.Initialize(); } } else { customChildren.Add(customChild); } } } item.Dispatcher.InvokeAsync(() => { try { int level = tag.Level; item.Items.Clear(); foreach (Tuple <string, IEnumerable <IResultVisualizer> > customChild in customChildren) { if (customChild.Item1 == "[Expanded]") { foreach (IResultVisualizer child in customChild.Item2) { item.Items.Add(CreateTreeItem(tree, child, level + 1)); } } else { TreeViewItem customItem = CreateTreeItem(tree, customChild.Item1, CompletionData.GetImage(CompletionDataType.Namespace), level + 1, nameItalic: true); customItem.Tag = new TreeViewItemTag() { Level = level + 1, ResultTreeItem = customChild.Item2, }; customItem.Items.Add(ExpandingItemText); customItem.Expanded += TreeViewItem_Expanded; item.Items.Add(customItem); } } } catch (Exception ex3) { MessageBox.Show(ex3.ToString()); } }); } else if (children != null) { List <IResultVisualizer> cachedItems = children.ToList(); foreach (IResultVisualizer child in children) { child.Initialize(); } item.Dispatcher.InvokeAsync(() => { try { int level = tag.Level; item.Items.Clear(); foreach (IResultVisualizer child in cachedItems) { item.Items.Add(CreateTreeItem(tree, child, level + 1)); } } catch (Exception ex3) { MessageBox.Show(ex3.ToString()); } }); } } catch (Exception ex2) { MessageBox.Show(ex2.ToString()); } }); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }