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