2012-06-22 14 views
7

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 el item.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 visto

    Ejemplo:

    <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! :)

+2

Buena primera pregunta Andy, bien construida con ejemplos precisos de exactamente lo que intentabas destacar! +1 – ThePower

+0

@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

+0

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

Respuesta

1
<Style x:Key="listBoxStyle" TargetType="{x:Type ListBox}"> 
    <Style.Resources> 
     <!-- Background of selected item when focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" /> 
     <!-- Background of selected item when not focussed --> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" /> 
    </Style.Resources> 
</Style> 

<ListBox Style="{StaticResource listBoxStyle}"> 
</ListBox> 
+0

gracias por su respuesta, pero esto no resuelve mi problema. Conozco estas líneas, pero tengo una dependencia existente entre el color (su ejemplo: color = "Red") y un valor booleano currentField.Save, un objeto en tiempo de ejecución. Si es falso, el color debe ser amarillo y si es verdadero, el color debe ser verde. – Andy

Cuestiones relacionadas