Gil*_*ili 5 wpf stackpanel virtualizingstackpanel
我有以下ListBox:
<ScrollViewer>
<!--Spec Definitions-->
<ListBox DataContext="{Binding SpecPackageSpecGroupListViewModel}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
ItemContainerStyle="{StaticResource SpecPackageSpecGroupListBoxStyle}"
ItemsSource="{Binding SortedChildren}"
Background="Transparent"
BorderThickness="0" SelectionMode="Extended"
Margin="5,5,5,5">
<ListBox.ItemTemplate>
<DataTemplate>
<Controls:SpecPackageSpecGroupControl/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)
这个列表框应该容纳〜1000个项目,但是复杂的项目.我希望它能与VirtualizingStackPanel一起使用,所以我将可视化XAML配置设置为:
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
Run Code Online (Sandbox Code Playgroud)
我的问题是我认为它不起作用 - 首先 - 加载~700项需要很长时间,其次,当我在控制构造函数上遇到断点时 - 我可以看到它被调用700次:
public static int Counter = 0;
public SpecPackageSpecGroupControl()
{
InitializeComponent();
Counter++;
if (Counter%100 == 0)
Console.WriteLine("Hi");
}
Run Code Online (Sandbox Code Playgroud)
我在Console.WriteLine("Hi")上断点,我可以看到静态计数器达到了700.
所以基本上是创建UIElements,尽管这是一种虚拟模式.
我误解了虚拟化模式,还是我做错了什么?
不要把它放在ScrollViewer中.您粘贴的XAML确实绕过了虚拟化,但出于不同的原因:ListBox完全扩展(不滚动),因为scrollViewer允许它.因为它是完全"扩展"的,所以ListBox不使用虚拟化.如果将它放在常规容器中,它将使用其内置的滚动查看器 - Border,Grid等.
| 归档时间: |
|
| 查看次数: |
3072 次 |
| 最近记录: |