虚拟化TreeView - 滚动时不稳定的行为

6

在跟随这个问题这个问题之后,我现在有了一个类似下图的具有分层数据的TreeView:

enter image description here

由于数据量很大,我已经打开了TreeViewVirtualization属性(VirtualizingPanel.IsVirtualizing="True")。
现在问题是:滚动树非常不稳定。我试图解释这种无法解释的行为:
  • 滚动时,项目会消失/卸载。使用 WPF Inspector,我实际上看到它们不断地卸载和重新加载。
  • 在滚动第3级项目时,树不会加载尚未加载的项目(如预期),但下一个第2级项目会跳到可见的第3级项目之上。

备注:

  • 当所有的Level2项目都折叠时,滚动正常工作。
  • 关闭虚拟化可以解决滚动问题(但在这种情况下我会遇到加载问题)
  • 我已经阅读了这里,说这个bug已经在.Net 4.5.2中修复。我甚至尝试了.Net 4.7.1,但行为仍然相同。

有没有办法可以避免这种行为?


我不确定我理解症状是什么。你是说二级项目叠加在三级项目上 - 在同一位置绘制? - Sam Bent - MSFT
听起来你发现了一个类似症状但不同根本原因的错误,与你引用的4.5.2错误不同。请在http://connect.microsoft.com上打开一个错误,并附上一个重现(或与我分享一个重现)。该行为可能取决于您的TreeView及其项目的模板和样式,这里没有显示。我们最近修复了一组问题(针对4.7.2),当您动画展开/折叠TreeViewItem时会出现,但症状不同-没有重叠的渲染。 - Sam Bent - MSFT
1个回答

0
你尝试过将VirtualizingPanel的ScrollUnit设置为Pixel-Scrolling吗?当IsVirtualizing和IsVirtualizingWhenGrouping被设置为true时,这可以帮助我解决ListView上奇怪的滚动行为:
VirtualizingPanel.IsVirtualizing='True'
VirtualizingPanel.IsVirtualizingWhenGrouping='True'
VirtualizingPanel.ScrollUnit='Pixel'

是的,我已经尝试过了,但它并没有解决问题。实际上它已经设置为“像素”。问题出在虚拟化本身。 - Yvonnila

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