我想创建一种样式,使我的单元格内容在正数时为绿色,如果为负,则为红色,如果为0,则为黑色。
我知道转换器和绑定,但是是否可以在不命名特定列绑定到的字段的情况下执行此操作(例如。我要基于细胞的价值(?
<Style x:Key="GreenIfPositive" TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
<Style.Triggers>
<DataTrigger Binding="{Binding, Converter={StaticResource greaterThanZeroDecimalConverter}}" Value="True">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
<DataTrigger BBinding="{Binding, Converter={StaticResource greaterThanZeroDecimalConverter}}" Value="False">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="0">
<Setter Property="Foreground" Value="Black"/>
</DataTrigger>
</Style.Triggers>
</Style>
这样我就可以在列上使用它,而无需重新迭代该样式,这样我就可以选择我所基于的属性。
这里是DataGridTextColumn
的解决方案。 DataGridTextColumn创建TextBlock元素来显示单元格值。文本块具有字符串Text
属性。这些 TextBlocks 可以通过 DataGridCellContent
属性访问,因此生成的绑定路径是"Content.Text"。
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
Path=Content.Text, Mode=OneWay,
Converter={StaticResource greaterThanZeroDecimalConverter}}"
Value="True">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
Path=Content.Text, Mode=OneWay,
Converter={StaticResource greaterThanZeroDecimalConverter}}"
Value="False">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
Path=Content.Text, Mode=OneWay}"
Value="0">
<Setter Property="Foreground" Value="Black"/>
</DataTrigger>
</Style.Triggers>
注意{RelativeSource Self}
.
我还必须更改Convert
方法,因为 Text 是字符串属性,而传入值是字符串。
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double d;
if (value != null && value is string && double.TryParse(value.ToString(), out d))
{
return d > 0;
}
return null;
}