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!
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?
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.
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.
Ich habe es. Ich musste meiner ComboBox nur Folgendes hinzufügen:
%Vor% 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
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.
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%Tags und Links wpf data-binding combobox