Item控件中的虚拟机制
当列表项很少的时,列表控件的显示没什么问题。然而当列表项很多的时候,情况就不同了。WPF的列表控件在内部使用一个StackPanel控件来排列它的子项。这样会发生一个可以预料到的行为,WPF会创建它的所有列表项,不管这个列表项是否显示。一个列表控件可能包含上千个列表项,可以想象在内存中创建和维持这些对象将会耗费大量的系统资源。如果一个列表控件是数据绑定的,你可以用VirtualizingStackPanel代替StackPanel来实现部分显示。
VirtualizingStackPanel类似于StackPanel控件,但它在显示数据绑定控件的时候提供额外的功能——仅创建要显示的列表项。这意味着其他列表项是虚拟的,仅在显示的时候创建。
开启列表控件的虚拟机制。
新建一个ItemsPanelTemplate,在模板中指定一个VirtualizingStackPanel。如下所示:
<TreeView Margin="51,90,107,72" Name="treeView1">
<TreeView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</TreeView.ItemsPanel>
<!-- Items omitted -->
</TreeView>
VirtualizingStackPanel控件显示的时候默认实现虚拟机制,你可以通过内部的处理来关闭虚拟机制。将VirtualizingStackPanel.IsVirtualizing附加属性设置为True则开启虚拟机制,设置为fase则将其关闭。
一些WPF控件,比如ListBox和ListView,默认提供虚拟机制。为了确保这些控件的虚拟机制是打开的你必须将VirtualizingStackPanel.IsVirtualizing附加属性设置为True。
浙公网安备 33010602011771号