Question

J'ai un problème ici, je veux montrer certains éléments dans un TreeView, environ 100.000 éléments. Si j'utilise la valeur par défaut WPF TreeView tout semble fonctionner, mais si j'utilise une coutume-TreeView (qui est à l'heure actuelle seulement un ItemsControl), la virtualisation ne semble pas fonctionner plus. En faisant des recherches sur le Web, je l'ai essayé quelques solutions, mais aucun d'entre eux ne semble fonctionner ... Voici mon 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>

Les articles sont dans un ObservableCollection avec DataBinding, de sorte que cela ne devrait pas être le problème ... mais quel est-il ???

Greets,

Jürgen

Était-ce utile?

La solution

Le VirtualizingStackPanel a un code spécial qui ressemble pour TreeView et TreeViewItem. En outre, TreeViewItem met en œuvre VirtualizingStackPanel.IProvideStackingSize, qui est une interface interne que vous ne serez pas en mesure de mettre en œuvre.

Donc, si vous essayez de reproduire la structure hiérarchique des éléments comme dans le TreeView, alors vous auriez à tirer de la virtualisation TreeView à l'utilisation (non ItemsControl).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top