gpt4 book ai didi

wpf - VirtualizingStackPanel 不起作用

转载 作者:行者123 更新时间:2023-12-04 17:41:07 25 4
gpt4 key购买 nike

我有以下列表框:

<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>

这个列表框应该包含大约 1000 个项目,但很复杂。
我希望它与 VirtualizingStackPanel 一起使用,因此我将可视化 XAML 配置设置为:
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"

我的问题是我认为它不起作用 - 首先 - 加载 ~700 个项目需要很长时间,其次,当我在控件构造函数上遇到断点时 - 我可以看到它被调用了 700 次:
public static int Counter = 0;

public SpecPackageSpecGroupControl()
{
InitializeComponent();

Counter++;
if (Counter%100 == 0)
Console.WriteLine("Hi");
}

我在 Console.WriteLine("Hi") 上断点,我可以看到静态计数器达到 700。

所以基本上 UIElements 正在被创建,尽管这是一个虚拟模式。

我误解了虚拟化模式,还是我做错了什么?

最佳答案

不要将它放在 ScrollViewer 中。您粘贴的 XAML 确实绕过了虚拟化,但出于不同的原因:ListBox 完全扩展(不滚动),因为 scrollViewer 允许它。因为它是完全“扩展的”,所以 ListBox 不使用虚拟化。如果您将其放置在常规容器(边框、网格等)中,它将使用其内置的滚动查看器。

关于wpf - VirtualizingStackPanel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3710993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com