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