Как изменить комбобокс конкретный пункт цвет динамически в WPF

<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>

с вышеуказанным кодом я покрасил все элементы в зеленом цвете combobox.

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

с вышеуказанным кодом я заполнил пять элементов в combobox. Теперь мне нравится менять цвет 3-го пункта (3) на "красный" в коде за динамически. Как я могу это сделать?

2 ответов


вместо добавления фактического значения i в поле со списком добавьте ComboBoxItem вместо:

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

если вы хотите изменить ComboBoxItem, созданный с помощью этого метода позже, Вот как вы можете это сделать:

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

во-первых, попробуйте связать свой источник и избежать прямого доступа через код позади. И чем вы можете использовать конвертер в привязке ItemSource.

например

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

и в вашем конвертере найдите 3-й элемент и дайте им другой цвет переднего плана