我这里有个问题,我想在TreeView中显示一些项目,大约100.000个元素。如果我使用默认的WPF TreeView,似乎一切都能正常工作,但如果我使用自定义树视图(目前它只是一个ItemsControl),虚拟化似乎不再起作用。在网上搜索时,我尝试了一些解决方案,但似乎都不起作用……下面是我的xaml:
<Style TargetType="{x:Type my:MultiSelectionTreeView}">
<Setter Property="TreeView.Background" Value="Transparent"/>
<Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
<Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
<Setter Property="TreeView.OverridesDefaultStyle" Value="True" />
<Setter Property="ItemsControl.ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="TreeView.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type my:MultiSelectionTreeView}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer Focusable="True" CanContentScroll="true"
Padding="4"
VerticalScrollBarVisibility="Auto">
<ItemsPresenter HorizontalAlignment="Stretch"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这些项目都在一个带有DataBinding的ObservableCollection中,所以这应该不是问题……但是它是什么?
大家好,
于尔根
发布于 2011-04-30 08:06:58
VirtualizingStackPanel有一些查找TreeView和TreeViewItem的特殊代码。此外,TreeViewItem实现了VirtualizingStackPanel.IProvideStackingSize
,这是一个您无法实现的内部接口。
因此,如果您试图复制TreeView中项目的层次结构,则必须从TreeView派生才能使用虚拟化(而不是ItemsControl)。
https://stackoverflow.com/questions/5833279
复制相似问题