WPF:TreeView虚拟化无法正常工作

Ara*_*and 6 wpf treeview virtualization ui-virtualization

如果TreeView设置如下,什么可以阻止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>
Run Code Online (Sandbox Code Playgroud)

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

Ara*_*and 6

问题在于造型.经过一些研究,我们发现有一个未命名的样式针对TreeView(即一个DataType={x:Type TreeView}没有a x:Key)和一个目标TreeViewItem在我们的App.xaml(或等效的)它分别覆盖了ControlTemplate每个.

这些样式没有设置ItemsPanel为a 的触发器VirtualizingStackPanel,也没有提及任何虚拟化.删除样式后,TreeView工作正常.即使本地属性设置ItemsPanelVirtualizingStackPanel.Isvirtualizing="True"TreeView这些属性没有被传播到了TreeViewItems树视图,以便顶层将虚拟化而子类就不会(作为其虚拟化的行为是依赖于TreeViewItem)