Fügt einen Rahmen um alle untergeordneten Elemente eines TreeViewItems hinzu

8

Ich habe ein TreeView und ich versuche, einen Stil zu implementieren, der es mir erlaubt, einen Rahmen um alle Kinder eines bestimmten Knotens zu setzen, indem ich HierarchicalDataTemplate verwende. Ein Beispiel von dem, was ich will, ist unten gezeigt:

Der folgende Code ist was ich bisher habe.

%Vor%

Was muss ich hinzufügen, um meinen Rahmen so zu implementieren, wie ich es möchte?

    
Joseph Devlin 10.05.2013, 16:07
quelle

2 Antworten

12

Um eine Border um die Sammlung von Kindern für eine TreeViewItem zu rendern, müssen wir die Style für ItemContainerStyle der TreeView

ändern

TreeViewItem Style verwendet standardmäßig <ItemsPresenter x:Name="ItemsHost" /> , um den Inhalt der Kinder zu rendern.

Children's Content im Standard ItemContainerStyle ist gegeben durch

%Vor%

Nun, um dies zu testen, hatte ich eine Collection mit einem Bool namens Type und habe gerade versucht, ein Border zu rendern, wenn dieses bool True war

Also habe ich die ItemsPresenter auf

aktualisiert %Vor%

Was dann das folgende ergab

Sie müssen natürlich die oben genannten Bindungen aktualisieren, damit sie auf Ihren eigenen Fällen basieren, wenn Sie möchten, dass Border gerendert wird.

In meinem Fall wurde meine Type Variable für das Element mit "1.1" als Header-Inhalt auf True gesetzt.

    
Viv 10.05.2013, 17:57
quelle
2

Sieht so aus, als hätte das WPF-Team gedacht, dass niemand diese Funktionalität benötigt, also keinen Rahmen um ItemsPresenter in TreeViewItem template eingefügt haben. Daher müssen Sie TreeViewItem template ändern und den Rahmen um% co_de hinzufügen %.

Sie können die Standarddefinition ItemsPresenter style / template anzeigen, indem Sie WPF-Themes XAML-Wörterbücher herunterladen. Links werden bereitgestellt hier .

Hier ist ein vollständiges XAML einer funktionierenden Lösung:

%Vor%

Hier ist, wie Knoten Klasse definiert ist:

%Vor%     
Stipo 19.05.2013 23:00
quelle