列表框、虚拟化StackPanel和WPF中的平滑滚动
我有一个列表框、虚拟化StackPanel和WPF中的平滑滚动,wpf,performance,listbox,scroll,virtualizingstackpanel,Wpf,Performance,Listbox,Scroll,Virtualizingstackpanel,我有一个列表框,其中可能有许多行模板化的DB记录,包括绑定到可观察集合的图像。有时,收藏品可以容纳数千件物品 性能很好,但是滚动是默认的跳跃行为。我希望它能够平滑滚动,所以我取消选中了ScrollViewer.CanContentScroll 现在我有了平滑的滚动,但性能非常糟糕:数据在一个单独的线程中检索,线程很快完成,但结果显示在列表框中需要10-20秒。我假设这是因为取消选中ScrollViewer.CanContentScroll将底层的VirtualizangStackPanel更改为
列表框
,其中可能有许多行模板化的DB记录,包括绑定到可观察集合的图像
。有时,收藏品可以容纳数千件物品
性能很好,但是滚动是默认的跳跃行为。我希望它能够平滑滚动,所以我取消选中了ScrollViewer.CanContentScroll
现在我有了平滑的滚动,但性能非常糟糕:数据在一个单独的线程中检索,线程很快完成,但结果显示在列表框中需要10-20秒。我假设这是因为取消选中ScrollViewer.CanContentScroll将底层的VirtualizangStackPanel
更改为常规的StackPanel
,因此它在显示结果之前加载整个集合
因此,我的问题是:如何在不牺牲虚拟化StackPanel
行为和性能的情况下保持平滑滚动?当取消选中CanContentScroll时,您将看到。答案确实令人沮丧:目前还没有现成的解决方案:(
附:这不是第一篇发帖,问你问题。如果你使用.NET4.5(或者4.0,如果你愿意稍微修改一下),那么有一个答案
[请注意,@Guilluame的评论就在这个答案之前,但在浏览答案时并不特别明显。]我很害怕,但不得不问。我在问之前搜索了一下,但没有找到那篇文章。我可能会再挖一点,但时间有限,所以我现在不得不放弃平滑滚动。如果你准备使用一点技巧,你可以同时使用平滑滚动和虚拟化。有关详细信息,请查看类似问题。VirtualzingPanel.ScrollUnit=“像素”