C# 如何在WPF中生成条件DataTrigger

C# 如何在WPF中生成条件DataTrigger,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我想在我的数据网格中使用WPF中的style进行着色DataGridRow。我想根据价值来计算颜色的百分比。如果我的值绑定错误介于0和50之间,它将是红色的。反之亦然,它将被涂成绿色 但我如何处理风格呢 <Style TargetType="DataGridRow"> <Style.Triggers> <DataTrigger Binding="{Binding Error}" Value="

我想在我的数据网格中使用WPF中的
style
进行着色
DataGridRow
。我想根据价值来计算颜色的百分比。如果我的值绑定
错误
介于0和50之间,它将是红色的。反之亦然,它将被涂成绿色

但我如何处理风格呢

 <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Error}" Value="Error>50"> //maybe something like this
                        <Setter Property="Foreground" Value="#FFE08F8F" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Error}" Value="2">
                        <Setter Property="Foreground" Value="#FF6DBB6D" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>

//也许是这样的

您需要一个自定义转换器,该转换器将
错误
转换为指示错误状态的某个值;当
Error
大于50时,以下转换器将返回
True

public class ErrorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return System.Convert.ToInt(value) > 50;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
现在在参考资料中引用这个(和
True
helper,您可能不需要它,不记得转换是否是自动的):

True
然后像这样把它绑起来:

<Style TargetType="DataGridRow">
    <Style.Triggers>
        <DataTrigger 
            Binding="{Binding Error, Converter={StaticResource ErrorConverter}}" 
            Value="{StaticResource True}">
            <Setter Property="Foreground" Value="#FFE08F8F" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Error}" Value="2">
            <Setter Property="Foreground" Value="#FF6DBB6D" />
        </DataTrigger>
    </Style.Triggers>
</Style>
public class IntToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return value is int && ((int)value) > 50 ? Colors.Green : Colors.Red;
    }

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


按照这些思路应该可以工作。

我认为最灵活的解决方案是添加某种
ErrorToColor
转换器。然后使用这个XAML:

<Setter Property="Foreground" >
    <Setter.Value>
        <SolidColorBrush Color="{Binding Error, Converter={StaticResource errorToColorConverter}}" />
    </Setter.Value>
</Setter>

通过这种方式,您可以轻松管理不同错误值的颜色。

WPF
触发器
仅提供
相等性
比较。最好使用
Converter
返回1或0或true或false,并根据该值更改行的颜色。否则,您必须为每个值实现
DataTrigger
。HTH您能给我一个使用
转换器的示例吗
?虽然发布的答案显示了一个相等操作,但请记住,您可以始终使用
IMultiValueConverter
,也可以将要执行的操作传递给转换器。所以你可以检查,=,!=和排序。您将使用多值转换器传入绑定值,对照值和操作进行检查。所有这三个参数都是通用的。是的,您不需要
True
只需指定
Value=“True”
,而且由于OP从xaml传递
50
,因此您可能希望将该数字作为
ConverterParameter
传递,而不是将其硬编码到converterhanks中。。我喜欢这个解决方案,,
public class IntToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return value is int && ((int)value) > 50 ? Colors.Green : Colors.Red;
    }

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