Tengo un problema con configurar HighlightBrushKey
de SelectedItem
de Listbox
en WPF. Mi intención era establecer el color de un artículo dependiendo de un valor booleano dado, que se encuentra en el código.WPF que cambia ListboxItem resalta color cuando está seleccionado
que he probado los pasos siguientes:
ejecución de un convertidor, comprobando el booleano y devolver el color correcto.
Ejemplo:
<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>
El problema aquí es que el método Convert fue llamado una sola vez, pero necesito el convertidor que se llama cada vez que seleccione un elemento y el control de la Boole. Como un disparador, pero con el "
HighlightBrushKey
".Convertidor:
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; }
Mi siguiente idea estaba poniendo "
HighlightBrushKey
" a "Transparent
" y cambiar elitem.Background
manualmente en el código. El problema aquí es que mis artículos se convirtieron en blanco y el color de fondo no podía ser vistoEjemplo:
<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>
Gracias de antemano! :)
Buena primera pregunta Andy, bien construida con ejemplos precisos de exactamente lo que intentabas destacar! +1 – ThePower
@Andy ¿Qué es currentField1 en su convertidor? ¿Cómo está obteniendo esto en el convertidor? ¿Puedes intentar vincular a 'currentField' (es decir, YourViewModelProperty) en el estilo invisible proporcionado. – akjoshi
currentField es un objeto. El nombre de la clase es Campo y tiene una propiedad booleana llamada "Guardar". ¿cómo puedo vincularlo en XAML? – Andy