TreeView虛擬化跳轉

使用ItemContainerGenerator.ContainerFromItem方法能夠獲取對應數據的UIElement 。git

可是若是使用了虛擬化技術,超出可見區域的UIElement就獲取不到了。github

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

主要代碼只有5行code

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啦。blog

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

Demo運行效果圖文檔

完整示例在個人Githubget

相關文章
相關標籤/搜索