[英]How to make conditional DataTrigger in WPF
我想使用WPF中的style
在datagrid中为DataGridRow
着色。 我想根据价值确定着色百分比。 如果我具有0到50之间的值绑定Error
,它将为红色。 反之亦然,将其显示为绿色
但是我该如何处理样式?
<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
转换为指示错误状态的某个值。 当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
帮助器,您可能不需要它,不记得转换是否是自动的):
<system:Boolean x:Key="True">True</system:Boolean>
<local:ErrorConverter x:Key="ErrorConverter">
并像这样绑定它:
<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>
遵循这些原则的东西应该起作用。
IMO最灵活的解决方案是添加某种ErrorToColor
转换器。 然后使用此XAML:
<Setter Property="Foreground" >
<Setter.Value>
<SolidColorBrush Color="{Binding Error, Converter={StaticResource errorToColorConverter}}" />
</Setter.Value>
</Setter>
这样的转换器看起来像这样:
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();
}
}
这样,您可以轻松管理不同误差值的颜色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.