WPF ComboBox - Zeigt etwas anderes an, wenn ein Wert ausgewählt wird

7

Was ich tun muss, ist eine ComboBox, die Leute zeigt. Wenn Sie das Dropdown-Menü erweitern, werden Vorname und Nachname angezeigt. Wenn Sie jedoch eine Person auswählen, sollte der in der Combobox angezeigte Wert nur der Vorname der Person sein.

Ich habe das folgende ItemTemplate:

%Vor%

Was kann ich sonst tun, um nur den Vornamen anzuzeigen, wenn ein Element ausgewählt ist?

Danke!

BEARBEITEN

Die Frage wurde leicht geändert: Wenn ich das Bild der Person habe und nicht nur den Vornamen, wenn eine Person ausgewählt ist, möchte ich nur das Bild zeigen. Mit anderen Worten, wie kann ich zwei separate Vorlagen haben - eine für das Drop-down und eine für das ausgewählte Element?

    
Gus Cavalcanti 17.07.2009, 18:18
quelle

5 Antworten

5

Setzen Sie einen Trigger auf die DataTemplate. Der Trigger sollte die IsSelected-Eigenschaft überprüfen (die DataTemplate benötigt einen TargetType-Set, damit dies funktioniert). Wenn es ausgewählt ist, können Sie die Sichtbarkeit Ihrer TextBlocks auf Collapsed setzen und die Sichtbarkeit des Bildes auf sichtbar setzen. Dann machen Sie das Gegenteil für den Fall, dass es nicht ausgewählt ist.

    
Charlie 17.07.2009, 19:25
quelle
18

Hier ist die Lösung:

%Vor%

Grundsätzlich erstellen Sie hier eine weitere Ebene von DataTemplate. ComboBoxes ItemTemplate bleibt immer gleich. Der Inhalt innerhalb dieser Vorlage passt sich jedoch an die Bedingung an, an der Sie interessiert sind.

Der Trick, heruntergefallene Combobox-Objekte gegen Combobox-Elemente ausgewählter Bereiche zu unterscheiden, besteht darin, dass der ausgewählte Bereich nicht wirklich in das ComboBoxItem-Objekt eingeschlossen ist, sondern Teil des ComboBox-Steuerelements selbst ist. FindAncestor für ComboBoxItem gibt also null zurück, was wir im obigen Trigger verwenden.

    
Oleg Mihailik 19.07.2009 21:15
quelle
6

Ich habe es. Ich musste meiner ComboBox nur Folgendes hinzufügen:

%Vor%     
Gus Cavalcanti 17.07.2009 18:31
quelle
1

Eine andere Option ist die Verwendung von ItemTemplateSelector von ItemTemplate . Ich habe es folgendermaßen benutzt.

ComboBoxItemTemplateSelector stammt von DataTemplateSelector und hat zwei angefügte Eigenschaften, SelectedTemplate und DropDownTemplate . Dann setzen wir die DataTemplates von Xaml wie folgt

%Vor%

In SelectTemplate überprüfen wir, ob der aktuelle Container in ein ComboBoxItem gehüllt ist und wenn dies der Fall ist, geben wir das DropDownTemplate zurück. Ansonsten geben wir SelectedTemplate zurück.

%Vor%

Ein kleines Demo-Projekt, das dies verwendet, kann hier heruntergeladen werden: ComboBoxItemTemplateDemo.zip

Ich habe hier auch einen kurzen Blogpost gemacht: Different ComboBox ItemTemplate für das Dropdown-Menü . Es zeigt auch die andere offensichtliche Möglichkeit, dasselbe zu tun, aber mit Eigenschaften anstelle von angehängten Eigenschaften in ComboBoxItemTemplateSelector .

Oh, und GetVisualParent. Jeder scheint ihre eigenen Implementierungen zu haben, aber trotzdem, hier ist der, den ich benutze

%Vor%     
Fredrik Hedblad 14.05.2012 16:12
quelle
0

Ich habe den nächsten Ansatz verwendet

%Vor%

Und das Verhalten

%Vor%

hat wie ein Zauber gearbeitet. Gefällt mir nicht so sehr Loaded Event hier, aber Sie können es reparieren, wenn Sie wollen

    
Artiom 02.05.2013 07:39
quelle

Tags und Links