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>

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

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

使用上面的代码,我已将五个项目填充到组合框中。现在我喜欢在后面的代码中动态地将第 3 项 (3) 的颜色更改为“红色”。我怎样才能做到这一点?

4

3 回答 3

11

而不是在组合框中添加实际值,而是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;
}
于 2012-06-30T05:58:43.523 回答
2

首先,尝试绑定你的Source,避免通过后面的代码直接访问。而且您可以在 ItemSource 绑定中使用转换器。

例如

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

并在您的转换器中找到您的第 3 个项目并给它们一个不同的 ForegroundColor

于 2012-06-30T06:02:22.693 回答
0

除了 Mario Binder 的回答,这里有一个这样的转换器的例子:

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;
    }
}
于 2020-03-20T20:00:53.093 回答