2012-06-30 11 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> 

Với mã trên, tôi tô màu tất cả các mục trong hộp màu xanh kết hợp.Cách thay đổi màu mục cụ thể của combobox động trong wpf

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

Với mã trên, tôi đã điền năm mục vào hộp tổ hợp. Bây giờ tôi muốn thay đổi màu của mục thứ 3 (3) thành "màu đỏ" ở mã phía sau động. Làm thế nào tôi có thể làm điều đó?

Trả lời

10

Thay vì thêm giá trị thực tế của i trong combobox, thêm một ComboBoxItem thay vì:

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); 
     } 
    } 

Nếu bạn muốn thay đổi các ComboBoxItem tạo với phương pháp này sau đó, đây là cách bạn có thể làm điều đó:

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

Trước tiên, hãy thử ràng buộc Nguồn của bạn và tránh truy cập trực tiếp thông qua mã phía sau. Và hơn bạn có thể sử dụng một Trình chuyển đổi trong Binding ItemSource của bạn.

ví dụ:

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

và Chuyển Đổi tìm thấy bạn thứ 3 hàng và cung cấp cho họ một ForegroundColor khác nhau

+0

bạn có thể đưa ra một ví dụ nhỏ. Loại MyComboboxItems là gì? – marbel82