Frage

Ich habe hier ein Problem, ich möchte einige Elemente in einem Treeview zeigen, ungefähr 100.000 Elemente. Wenn ich das Standard-WPF-TreeView verwende, scheint alles zu funktionieren, aber wenn ich eine benutzerdefinierte Treeview verwende (die momentan nur eine Elementcontrol ist), scheint die Virtualisierung nicht mehr zu funktionieren. Während ich über das Web recherchierte, habe ich einige Lösungen ausprobiert, aber keiner von ihnen scheint zu funktionieren ... hier ist mein 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>

Die Elemente befinden sich in einer Beobachtung mit der Datenbank, also sollte das nicht das Problem sein ... aber was ist es ???

Begrüßt,

Jürgen

War es hilfreich?

Lösung

Das VirtualizingStackPanel verfügt über einen speziellen Code, der nach TreeView und TreeViewItem sucht. Darüber hinaus implementiert TreeviewItem VirtualizingStackPanel.IProvideStackingSize, Das ist eine interne Schnittstelle, die Sie nicht implementieren können.

Wenn Sie also versuchen, die hierarchische Struktur von Elementen wie in der TreeView zu replizieren, müssen Sie von TreeView abgeleitet, um die Virtualisierung (nicht die ItemsControl) zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top