在WPF中正确使用VirtualizingStackPanel

时间:2011-01-25 00:11:40

标签: wpf virtualizingstackpanel itemspanel

有人可以告诉我如何在WPF中正确使用VirtualizingStackPanel吗?我在ItemsPanelTemplate中为我的ItemsControl设置了一个VirtualizingStackPanel,并将其设置为我的ItemsHost,但是当我在我的item控件上注册一个CleanUpVirtualizedItem附加事件的监听器时,没有任何反应。我没有看到事件被调用。我也没有看到我的数据模板中的自定义控件上的任何Unloaded事件被调用,这表明我没有实际的虚拟化。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

尝试使用ListBox或ListView:

<ListBox ItemsSource="{Binding Items}"
    VirtualizingStackPanel.VirtualizationMode="Recycling" 
    VirtualizingStackPanel.CleanUpVirtualizedItem="ItemsControl_CleanUpVirtualizedItem">
</ListBox>

ListBox将自动处理项目的虚拟化 - 如果直接创建VirtualizingStackPanel,还需要做一些手动工作。这是因为 ItemsControl的默认ControlTemplate没有ScrollViewer,这是虚拟化的关键 - 更多信息here