static TreeViewItem GetTreeViewItem( ItemsControl parent, object item, bool isExpanded) { if (item is TreeViewItem tvi) { return(tvi); } var result = ContainerFromItem(parent, item); if (result == null && isExpanded) { parent.UpdateLayout(); result = ContainerFromItem(parent, item); } return(result); }
protected void CreateIcon(Floor floor) { ItemsControl control = new ItemsControl(); Canvas canvas = new Canvas(); control.ItemTemplate = Application.Current.FindResource("SegmentRowTemplate") as DataTemplate; canvas.Children.Add(control); control.ItemsSource = floor.Segments; control.UpdateLayout(); canvas.Measure(new Size(1000, 1000)); canvas.Arrange(new Rect(new Size(1000, 1000))); RenderTargetBitmap bmp = new RenderTargetBitmap((int)control.DesiredSize.Width, (int)control.DesiredSize.Height, 96, 96, PixelFormats.Pbgra32); bmp.Render(control); floor.Icon = bmp; }
private TreeViewItem BringItemIntoView(ItemsControl container, object item) { TreeViewItem element = container.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem; if (element != null) element.BringIntoView(); else if (container.Items.Contains(item)) { var vsp = (VirtualizingStackPanel)typeof(ItemsControl).InvokeMember("_itemsHost", BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic, null, container, null); if (vsp == null) { container.UpdateLayout(); vsp = (VirtualizingStackPanel)typeof(ItemsControl).InvokeMember("_itemsHost", BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic, null, container, null); } if (vsp != null) { var index = container.Items.IndexOf(item); if (index >= 0) { vsp.GetType().GetMethod("BringIndexIntoView", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(vsp, new object[] { index }); element = container.ItemContainerGenerator.ContainerFromItem(item) as TreeViewItem; } } else Debug.WriteLine("VirtualizingStackPanel NOT FOUND!!!"); } return element; }