WPF, Silverlight, Windows Phone 8 und Windows Store Apps

WPF: Farbe des "ListBoxItems" unter Windows 8 ändern
Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und Fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „WPF: Farbe des „ListBoxItems“ unter Windows 8 ändern“. Viel Spaß mit XAML Expertise.

Das Besondere an XAML ist die freie Anpassbarkeit der Oberfläche. Durch Styles und Dictionaries lässt sich ein wiederverwendbares Corporate-Design entwerfen. Daher kommt es oft vor, dass die Farbe eines selektierten ListBox-Eintrags angepasst werden soll. Nichts leichter als das, es muss nur ein neuer Style auf die SystemStyles und auf eine neue Farbe verweisen. Listing 1 zeigt, wie das mit nur wenigen Zeilen XAML-Code möglich ist.

Die schlechte Nachricht an dieser Lösung ist allerdings, dass sie unter Windows 8 nicht mehr funktioniert. Windows 8 erschwert das Überschreiben von SystemStyles, ein Grund hierfür ist nicht bekannt. Dieses How-to zeigt, wie der Wunsch nach einer neuen Farbe dennoch mit einer einfachen Lösung erfüllt wird.

Ab Visual Studio 2012 lässt sich direkt aus einem Steuerelement der ItemContainerStyle extrahieren und im eigenen XAML-Code bereitstellen. Das ermöglicht ein Manipulieren der Styles im Vergleich zu den Standardzuständen. Klicken Sie dazu einfach mit der rechten Maustaste auf eine ListBox und anschließend im Kontextmenü auf Edit Additional Templates | Edit Generated Item Container (ItemContainerStyle) | Edit a Copy… (Abb. 1).

Im folgenden Dialog wird abgefragt, wo der Style erzeugt werden soll. In diesem Beispiel wird der Name „SelectedListBoxItemStyle“ innerhalb des gleichen Dokuments ausgewählt. Sobald der Style im Ressourcenbereich erzeugt wurde, können die Zustände IsMouseOver, IsSelected und IsSelectedActive manipuliert werden. Beim letzten MultiTrigger mit aktiven IsSelectedActive und IsSelected befinden sich auch schon die gewünschten Eigenschaften. Hier ändern wir die Farbe bei Background und BorderBrush (Abb. 2) auf LightGreen (Listing 2, Abb. 3). Das war es auch schon. Ab sofort wird zur Laufzeit jeder selektierte ListBox-Eintrag mit einer hellgrünen Farbe angezeigt.


  
    
    
  
  
  

Abb. 1: Eine Kopie des „ItemContainerStyle“ erzeugen

Abb. 2: Standardfarbe eines selektierten „ListBoxItems“

Abb. 3: Geänderte Farbe eines selektierten „ListBoxItems“

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -