欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

TreeView虚拟化跳转

程序员文章站 2022-06-09 13:05:06
使用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运行效果图

TreeView虚拟化跳转

完整示例在我的github