2012-06-30 3 views
7
<Grid x:Name="LayoutRoot"> 
    <ComboBox x:Name="com_ColorItems" Height="41" Margin="198,114,264,0" VerticalAlignment="Top" FontSize="13.333" FontWeight="Bold" Foreground="#FF3F7E24"/> 
</Grid> 

Con il codice precedente ho colorato tutti gli elementi nella casella verde.Come modificare in modo dinamico il colore di un oggetto particolare combo

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
     for (int i = 0; i < 5; i++) 
     { 
      com_ColorItems.Items.Add(i); 
     } 
} 

Con il codice sopra ho inserito cinque elementi in una casella combinata. Ora mi piace cambiare il colore del terzo elemento (3) in "rosso" nel codice dietro dinamicamente. Come lo posso fare?

risposta

10

Invece di aggiungere il valore reale del i nella casella combinata, aggiungere un ComboBoxItem invece:

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      ComboBoxItem item = new ComboBoxItem(); 

      if (i == 2) item.Foreground = Brushes.Blue; 
      else item.Foreground = Brushes.Pink; 

      item.Content = i.ToString(); 
      com_ColorItems.Items.Add(item); 
     } 
    } 

Se si desidera modificare la ComboBoxItem creato con questo metodo più avanti, questo è come si può fare:

var item = com_ColorItems.Items[2] as ComboBoxItem; // Convert from Object 
if (item != null)         // Conversion succeeded 
{ 
    item.Foreground = Brushes.Tomato; 
} 
1

Innanzitutto, provare a collegare la sorgente ed evitare l'accesso diretto tramite codice nascosto. E poi puoi usare un Converter nel tuo ItemSource Binding.

ad es.

ItemSource={Binding MyComboboxItems, Converter={StaticResource MyConverter}} 

e nel vostro convertitore a trovare il terzo elemento e dare loro un diverso ForegroundColor

+0

Potrebbe dare un piccolo esempio. Qual è il tipo di MyComboboxItems? – marbel82