wpf 更改组合框中某些行的背景色

i86rm4rw  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(214)

我有一个绑定的组合框,根据我在记录中得到的值,我想改变组合框中某些行的背景颜色。这可能吗?如果可能,又是如何做到的?
再澄清一下。我正在查看每一行中的一个字段,并根据其值更改背景颜色。所以我可以改变所有的行,一些行,或者不改变任何行。
谢谢

cx6n0qe3

cx6n0qe31#

使用ItemContainerStyle设置每行的项目背景色。您可以绑定到行的数据上下文中的属性,并使用IValueConverter获取适当的画笔。例如,假设项目具有属性“Y”:

<ComboBox>
    <ComboBox.Resources>
        <local:BoolToBrushConverter x:Key="BoolToBrushConverter" />
    </ComboBox.Resources>
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="Background" 
                    Value="{Binding Y,Converter={StaticResource BoolToBrushConverter}}" />
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

然后“BoolToBrushConverter”将是这样的:

public class BoolToBrushConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value as bool? == true) ? Brushes.Green : Brushes.Red;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
uqxowvwt

uqxowvwt2#

为项目创建一个模板,其中包含一个绑定到显示值的文本块。
创建一个自定义IValueConverter,将其他值转换为颜色。
将背景绑定到其他值并使用转换器。

pvabu6sv

pvabu6sv3#

Combobox with border seperators

<ComboBox.ItemContainerStyle>
    <Style TargetType="ComboBoxItem">
        <Setter Property="BorderBrush" Value="DarkGray" />
        <Setter Property="BorderThickness" Value="0,1,0,0" />
    </Style>
</ComboBox.ItemContainerStyle>

相关问题