Ho riscontrato un problema con l'impostazione dello HighlightBrushKey
di un SelectedItem
di un Listbox
in WPF. La mia intenzione era quella di impostare il colore di un oggetto in base a un dato valore booleano, che giace nel codice.WPF Modifica ListboxItem Evidenzia colore quando selezionato
ho provato seguenti fasi:
L'implementazione di un convertitore, controllo il booleano e ritorno il colore giusto.
Esempio:
<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>
Il problema qui è che il metodo Convert è stato chiamato solo una volta, ma ho bisogno del convertitore di essere chiamato ogni volta che si seleziona una voce e controllo del booleana. Come un trigger, ma con il "
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; }
La mia prossima idea stava tramontando "
HighlightBrushKey
" a "Transparent
" e cambiando ilitem.Background
manualmente nel codice. Il problema qui è che i miei oggetti sono diventati bianchi e il colore di sfondo non poteva essere vistoEsempio:
<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>
Grazie in anticipo! :)
Bella prima domanda Andy, ben costruita con esempi precisi di esattamente quello che stavi cercando di evidenziare! +1 – ThePower
@Andy Che cosa è currentField1 nel convertitore? Come stai ottenendo questo in convertitore? Puoi provare l'associazione a 'currentField' (cioè YourViewModelProperty) nello stile invisibile fornito. – akjoshi
currentField è un oggetto. Il nome della classe è Campo ed ha una proprietà booleana denominata "Salva". come posso legarlo ad esso in XAML? – Andy