使用ItemContainerGenerator.ContainerFromItem方法可以獲取對應數據的UIElement 。 但是如果使用了虛擬化技術,超出可見區域的UIElement就獲取不到了。 參考微軟的文檔《如何:在 TreeView 中查找 TreeViewItem》,去掉一些不必要的 ...
使用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中