我想创建一种样式,使得我的单元格内容为绿色(如果为正,红色为负数)或黑色(如果为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>
这样我就可以在列上使用它而无需重新迭代该样式,这样我就可以选择我所依据的属性。
答案 0 :(得分:2)
这是DataGridTextColumn
的解决方案。 DataGridTextColumn创建TextBlock元素以显示单元格值。 TextBlock具有字符串Text
属性。可以通过DataGridCell Content
属性访问这些TextBlock,因此生成的绑定路径是&#34; Content.Text&#34;
<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;
}