首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VirtualizingStackPanel不工作

VirtualizingStackPanel不工作
EN

Stack Overflow用户
提问于 2010-09-15 00:42:48
回答 1查看 3.5K关注 0票数 5

我有以下ListBox:

代码语言:javascript
复制
<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配置设置为:

代码语言:javascript
复制
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling" 

我的问题是,我认为它不工作-首先-它需要很长的时间来加载大约700项,其次,当我在我的控件构造函数上遇到断点时-我可以看到它被调用了700次:

代码语言:javascript
复制
public static int Counter = 0;

public SpecPackageSpecGroupControl()
{
    InitializeComponent();

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

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

因此,虽然这是一种虚拟模式,但基本上是在创建UIElements。

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

EN

回答 1

Stack Overflow用户

发布于 2010-09-15 01:01:53

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3710993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档