TreeView虚拟化跳转

Posted noctwolf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于TreeView虚拟化跳转的主要内容,如果未能解决你的问题,请参考以下文章

WPF TreeView 虚拟化-设置滚动到选中项

WPF TreeView保持屏幕上可见的元素列表

TreeView点击相应的节点为啥不跳转

treeview 节点的属性NavigateUrl如何带参跳转并跳转到指定页面?

WPF TreeView 数据绑定隐藏/显示展开/折叠图标

WPF 列表开启虚拟化的方式