在WPF中使用ListBox,VirtualizingStackPanel和Smooth Scrolling

时间:2009-12-17 19:44:48

标签: wpf performance listbox scroll virtualizingstackpanel

我有一个ListBox,可能有很多行的模板化数据库记录,包括Image,绑定到ObservableCollection<MyItem>。有时收藏品可能包含数千件物品。

性能很棒,但滚动是默认的跳跃行为。我希望它能够平滑滚动,所以我取消选中ScrollViewer.CanContentScroll

现在我有平滑滚动,但性能非常糟糕:数据在一个单独的线程中检索,并且线程快速完成,但结果显示在ListBox需要10-20秒。我认为这是因为取消选中ScrollViewer.CanContentScroll会将基础VirtualizingStackPanel更改为常规StackPanel,因此它会在显示结果之前加载整个集合。

所以我的问题是:如何在不牺牲VirtualizingStackPanel行为和性能的情况下保持平滑滚动?

2 个答案:

答案 0 :(得分:7)

当您取消选中CanContentScroll时,您lose virtualization。答案非常令人沮丧:目前还没有开箱即用的解决方案:(。

PS:这不是第一篇帖子,问this very question

答案 1 :(得分:3)

如果您使用的是.NET 4.5(或者如果您愿意破解一下,则为4.0),那么答案是over here

[请注意,@ Guilluame的评论在这个回答之前就已经出现了,但在浏览答案时并不是特别明显。]