如果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>
我有一个没有虚拟化的,当我展开节点(并使用snoop检查)时,我已经创建了所有的TreeViewItems。我想知道是否有一些容器组合会阻止TreeView虚拟化其内容。 (比如在StackPanel中托管它)
答案 0 :(得分:6)
问题在于造型。经过一些研究,我们发现有一个未命名的样式定位TreeView(即一个DataType={x:Type TreeView}
没有x:Key
),一个针对我们App.xaml中的TreeViewItem
(或等效的)它分别覆盖了每个ControlTemplate
。
这些样式没有将ItemsPanel
设置为VirtualizingStackPanel
的触发器,也没有提及任何虚拟化。删除样式后,TreeView工作正常。即使本地属性在ItemsPanel
上设置了VirtualizingStackPanel.Isvirtualizing="True"
和TreeView
,这些属性也没有被传播到TreeViewItems
,因此TreeView的顶层会被虚拟化,而子类别不会(因为它们的虚拟化行为取决于TreeViewItem
)
答案 1 :(得分:1)
有同样的问题。就我而言,TreeView的初始大小不受限制(TreeView在弹出窗口中)。因此,虚拟化面板首次初始化了所有控件。
将TreeView的MaxHeigt设置为1000可解决该问题。