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

上記のコードで、コンボボックスに5つの項目を入力しました。ここで、コードビハインドで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

まず、ソースをバインドし、コードビハインドを介して直接アクセスしないようにします。そして、ItemSourceバインディングでConverterを使用できます。

例えば

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

コンバーターで3番目のアイテムを見つけて、別のForegroundColorを指定します

于 2012-06-30T06:02:22.693 に答える
0

マリオバインダーの答えに加えて、ここにそのようなコンバーターの例があります:

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 に答える