Виртуализация StackPanel на дереве IST не виртуализации
-
27-10-2019 - |
Вопрос
У меня здесь проблема, я хочу показать некоторые предметы в деревьях, около 100 000 элементов. Если я использую Treeview WPF по умолчанию, кажется, все работает, но если я использую пользовательский перевод (который в настоящее время является только для CONTERCONTROL), виртуализация, похоже, больше не работает. Во время исследования через Интернет я пробовал некоторые решения, но ни один из них не работает ... вот мой 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, так что это не должно быть проблемой ... но что это ???
Приветствует,
Юрген
Решение
У Virtualizing StackPanel есть специальный код, который ищет TreeView и TreeViewItem. Кроме того, TreeViewItem реализует VirtualizingStackPanel.IProvideStackingSize
, который является внутренним интерфейсом, который вы не сможете реализовать.
Поэтому, если вы пытаетесь воспроизвести иерархическую структуру элементов, как в Treeview, то вам придется вывести из Treeview, чтобы использовать виртуализацию (не элементы Control).