2012-06-22 13 views
7

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 il item.Background manualmente nel codice. Il problema qui è che i miei oggetti sono diventati bianchi e il colore di sfondo non poteva essere visto

    Esempio:

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

+2

Bella prima domanda Andy, ben costruita con esempi precisi di esattamente quello che stavi cercando di evidenziare! +1 – ThePower

+0

@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

+0

currentField è un oggetto. Il nome della classe è Campo ed ha una proprietà booleana denominata "Salva". come posso legarlo ad esso in XAML? – Andy

risposta

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

grazie per la tua risposta, ma questo non risolve il mio problema. Conosco queste righe, ma ho una dipendenza esistente tra il colore (il tuo esempio: color = "Red") e un valore booleano currentField.Save, un oggetto in runtime. Se è falso, il colore dovrebbe essere giallo e se è vero, il colore dovrebbe essere verde. – Andy