4

我有一个TreeView多层的 XAML。使用此解决方案,我可以获得每个不同层的 XAML 配置外观,并确认它是 UI 虚拟化。

但是,当我将特定层切换为与其父层VirtualizingStackPanel不同Orientation(无论是通过像这个解决方案这样的代码还是使用Snoop都无关紧要),然后 UI 虚拟化就会关闭,并且一旦我展开它就会TreeView实现所有TreeViewItem层。

在研究这种行为时,我注意到在VirtualizingStackPanel您深入研究其MeasureOverride功能的参考源中,您会在第 2116 行找到以下评论

计算此面板的方向是否不同(原文如此)其父或后代

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

  • 为什么层之间的方向一致性很重要?
  • 如何让 UI 虚拟化在其中TreeView具有不同方向的情况下工作?
4

1 回答 1

3

UI 虚拟化依赖于正确测量视口和应在视图中的内容的能力。一般来说,如果您在一维中滚动一个类似列表的结构(就渲染而言,将树视图视为缩进列表),那么效果很好。如果您突然必须在二维中计算它,那也不会奏效,具体取决于您正在渲染的孩子。想想如果其中一个水平方向的孩子比其他孩子高,但目前在屏幕上不可见,算法必须解决什么问题——它如何在不计算布局的情况下确定下一个垂直孩子是否应该在视图中对于所有这些孩子,从而违背了虚拟化的目的?

于 2017-03-20T21:28:51.377 回答