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控件,比如ListBoxListView,默认提供虚拟机制。为了确保这些控件的虚拟机制是打开的你必须将VirtualizingStackPanel.IsVirtualizing附加属性设置为True

posted on 2008-12-09 09:31  林骄  阅读(404)  评论(0)    收藏  举报