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

相关文章
相关标签/搜索