天天看點

TreeView虛拟化跳轉

使用ItemContainerGenerator.ContainerFromItem方法可以擷取對應資料的UIElement 。

但是如果使用了虛拟化技術,超出可見區域的UIElement就擷取不到了。

參考微軟的文檔《如何:在 TreeView 中查找 TreeViewItem》,去掉一些不必要的和過時的代碼,寫了一個完整的例子。

主要代碼隻有5行

1                 itemsControl.ApplyTemplate();
2                 var itemsPresenter = FindVisualChild<ItemsPresenter>(itemsControl);
3                 itemsPresenter.ApplyTemplate();
4                 var virtualizingStackPanel = (VirtualizingStackPanel)VisualTreeHelper.GetChild(itemsPresenter, 0);
5                 virtualizingStackPanel.BringIndexIntoViewPublic(data.index);      

通過這樣的處理,就可以取到UIElement啦。

itemsControl = (ItemsControl)itemsControl.ItemContainerGenerator.ContainerFromItem(vm);      

Demo運作效果圖

完整示例在我的Github中

繼續閱讀