WPF中不同方向的虚拟化TreeView无法进行虚拟化?

4

我在XAML中有一个带有多个层级的TreeView。使用这个解决方案,可以为每个不同的层级获取一个配置好的 XAML 样式,已确认它具备UI虚拟化。

然而,当我将特定层级的VirtualizingStackPanel切换到具有不同方向的(无论是通过这个解决方案的代码还是使用Snoop)时,UI 虚拟化就会关闭,当我展开该层级时,TreeView就会立即实现所有TreeViewItem。

在研究这种行为时,我注意到在VirtualizingStackPanel的参考源代码中, 当您深入它的MeasureOverride函数时,您会发现第2116行上的此注释:

计算此面板是否与其父级或后代具有不同的方向

似乎微软已经有意地禁用了这种情况下UI虚拟化。所以我有两个问题:

  • 为什么在层之间保持方向一致性很重要?
  • 如何让UI虚拟化在TreeView中具有不同的方向?
1个回答

3

UI虚拟化依赖于正确测量视口和应该在视图中显示的内容的能力。通常情况下,如果您在一个维度上滚动列表结构(将树形视图视为缩进列表,就渲染而言),那么这样做会很好。但是,如果您突然要根据呈现的子项计算两个维度中的一个,则效果不佳。想象一下如果其中一个水平方向的子元素比其他子元素更高,但当前没有显示在屏幕上,该算法要如何确定下一个垂直子元素是否应该显示在视图中,而又不需要计算所有这些子元素的布局,从而破坏了虚拟化的目的?


谢谢。我想知道您是否知道一种方法,可以在可折叠的内部层中实现UI虚拟化? - Matt Thomas
我一直在研究从零开始制作UI虚拟化控件需要什么...是的,绝对不是简单的事情。 - Matt Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接