我有一个关于StackPanel中UI虚拟化的问题。
<ScrollViewer>
<StackPanel Orientation="Vertical">
<!--item1.-->
<StackPanel Orientation="Horizontal" Margin="5">
<Button/>
<TextBlock Text="oh hi."/>
</StackPanel>
<!--item2.-->
<StackPanel Orientation="Horizontal" Margin="5">
<Button/>
<TextBlock Text="oh hi."/>
</StackPanel>
<!--item3.-->
<StackPanel Orientation="Horizontal" Margin="5">
<Button/>
<TextBlock Text="oh hi."/>
</StackPanel>
<!--item4.-->
<StackPanel Orientation="Horizontal" Margin="5">
<Button/>
<TextBlock Text="oh hi."/>
</StackPanel>
...
<!--item9999.-->
<StackPanel Orientation="Horizontal" Margin="5">
<Button/>
<TextBlock Text="oh hi."/>
</StackPanel>
</StackPanel>
</ScrollViewer>我听说过WPF UI虚拟化。
然后,如果我在StackPanel中添加了很多控件,UI虚拟化在这个StackPanel上会自动工作吗?
我知道StackPanel.VirtualizingStackPanel.IsVirtualizing在默认情况下设置为True。
发布于 2011-09-10 00:43:26
不过,这里的示例并不是“虚拟的”。您已经在堆栈面板中显式创建了9999项。
虚拟化是指当其他一些项目控件(如列表、树、网格)在其内部有一个虚拟化面板时,项目控件根据需要生成/删除/重用项目,以使堆栈面板看起来有9999个项目,而实际上它只有几个项目。
与上面的比较最简单的是一个ListBox控件,其中有一个包含9999项列表的ItemsSource,以及一个DataTemplate:
<ListBox ItemsSource="{Binding Path=TheListOf9999Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="5">
<Button/>
<TextBlock Text="oh hi."/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>列表框内部将有一个虚拟化堆栈面板(它的ItemsPanel),它将在您向上和向下滚动时根据需要生成项目。
https://stackoverflow.com/questions/7364718
复制相似问题