Ich habe ein Problem mit der Einstellung HighlightBrushKey
eines SelectedItem
eines Listbox
in WPF. Meine Absicht war, die Farbe eines Items abhängig von einem gegebenen Booleschen Wert festzulegen, der im Code liegt.WPF Listenfeld ändern Hervorhebungsfarbe bei Auswahl
Ich habe versucht, folgende Schritte:
einen Converter Implementierung, die boolean Überprüfung und die richtige Farbe zurück.
Beispiel:
<ribbon:RibbonWindow.Resources> <l:WindowControl x:Key="ListBoxItemBackgroundConverter" /> <Style x:Key="listBoxStyle" TargetType="{x:Type ListBoxItem}"> <Style.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding Source={x:Static SystemColors.HighlightBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{Binding Source={x:Static SystemColors.ControlBrushKey}, Converter={StaticResource ListBoxItemBackgroundConverter}}"/> </Style.Resources> </Style> </ribbon:RibbonWindow.Resources>
Das Problem dabei war, dass die Methode Konvertieren nur einmal aufgerufen wurde, aber ich brauche die Converter jedes Mal, wenn ich ein Element auswählen aufgerufen werden und die Boolesche überprüfen. Wie ein Auslöser, aber mit der "
HighlightBrushKey
".Converter:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if(currentField == null) return Brushes.Yellow; if (currentField.Save) return Brushes.LightGreen; else return Brushes.Yellow; }
Meine nächste Idee wurde Einstellung "
HighlightBrushKey
" auf "Transparent
" und dieitem.Background
manuell in Code zu ändern. Das Problem hier war, dass mein Artikel wurde weiß und die Hintergrundfarbe konnte nichtBeispiel zu sehen:
<ListBox.Resources> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> </ListBox.Resources>
Vielen Dank im Voraus! :)
Schöne erste Frage Andy, gut gebaut mit präzisen Beispielen genau das, was Sie zu markieren versuchten! +1 – ThePower
@Andy Was ist currentField1 in Ihrem Konverter? Wie bekommst du das in Converter? Können Sie versuchen, an "currentField" (d. H. YourViewModelProperty) im Stil unsichtbar zu binden. – akjoshi
currentField ist ein Objekt. Klassenname ist Feld und hat eine Boolesche Eigenschaft namens "Speichern". Wie kann ich in XAML daran binden? – Andy