使用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運行效果圖文檔
完整示例在個人Github中get