C# 如何在wpf中动态更改组合框特定项的颜色

C# 如何在wpf中动态更改组合框特定项的颜色,c#,wpf,combobox,C#,Wpf,Combobox,使用上面的代码,我将组合框中的所有项目都涂成绿色 <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> private void

使用上面的代码,我将组合框中的所有项目都涂成绿色

<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>
private void Window\u已加载(对象发送方,路由目标)
{
对于(int i=0;i<5;i++)
{
com_ColorItems.Items.Add(i);
}
}

用上面的代码,我在combobox中填充了五个项目。现在我想在代码隐藏中动态地将第三项(3)的颜色更改为“红色”。如何操作?

在组合框中添加
I
的实际值,而不是添加
ComboBoxItem

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

首先,尝试绑定您的源代码,避免通过代码隐藏直接访问。 然后,您可以在ItemSource绑定中使用转换器

e、 g


在你的转换器中,找到第三个项目,给他们一个不同的ForegroundColor,除了Mario Binders答案,这里是这样一个转换器的示例:

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

你能举个小例子吗。MyComboxItems的类型是什么?
var item = com_ColorItems.Items[2] as ComboBoxItem; // Convert from Object
if (item != null)                                   // Conversion succeeded 
{
    item.Foreground = Brushes.Tomato;
}
ItemSource={Binding MyComboboxItems, Converter={StaticResource MyConverter}}
public class ListToColoredComboboxItemsConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is IEnumerable<Measurement> measurements)
        {
            var comboBoxItems = new List<ComboBoxItem>(measurements.Count());
            foreach (var measurement in measurements)
            {
                var item = new ComboBoxItem();
                item.Content = measurement;
                if (!string.IsNullOrWhiteSpace(measurement.ErrorMessage))
                    item.Foreground = Brushes.Red;
                comboBoxItems.Add(item);
            }
            return comboBoxItems;
        }
        return null;
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
public class ComboBoxItemToItemConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
    {
        if (value is ComboBoxItem comboBoxItem)
        {
            return comboBoxItem.Content;
        }
        return null;
    }
}