代码之家  ›  专栏  ›  技术社区  ›  Aran Mulholland JohnnyAce

WPF:TreeView虚拟化不工作

  •  6
  • Aran Mulholland JohnnyAce  · 技术社区  · 14 年前

    如果TreeView设置如下,什么可以阻止它进行虚拟化?

    <TreeView 
        ItemsSource="{Binding}" 
        VirtualizingStackPanel.IsVirtualizing="True">
        <TreeView.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel />
            </ItemsPanelTemplate>
        </TreeView.ItemsPanel>
        <TreeView.ItemContainerStyle>
            <Style
                TargetType="{x:Type TreeViewItem}">
                <Setter
                    Property="IsExpanded"
                    Value="{Binding IsExpanded, Mode=TwoWay}"/>
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>
    

    我有一个不是虚拟化的,当我扩展节点(并使用snoop检查)时,我已经创建了所有的treeviewitem。我想知道是否有一些容器的组合会阻止TreeView虚拟化其内容。(例如在StackPanel中托管它)

    1 回复  |  直到 14 年前
        1
  •  6
  •   Aran Mulholland JohnnyAce    14 年前

    问题在于造型。经过一些研究,我们发现有一种不知名的针对树视图的样式(即 DataType={x:Type TreeView} 没有一个 x:Key )还有一个目标是 TreeViewItem 在App.xaml(或等效文件)中,它重写了 ControlTemplate 分别为每个。

    这些样式没有设置 ItemsPanel 给一个 VirtualizingStackPanel 没有提到任何虚拟化。删除样式后,TreeView工作正常。即使本地属性设置了 项目名称 以及 VirtualizingStackPanel.Isvirtualizing="True" TreeView 这些财产不是由 TreeViewItems 因此,TreeView的顶层将进行虚拟化,而子类别则不会(因为它们的虚拟化行为取决于 树形视图项 )