如果值为负,WPF DataGridColumn 前景色变为红色

bao*_*ozi 5 c# wpf

我希望 a 的前景色DataGridColumn根据其值改变。我有

<DataGridTextColumn x:Name="Diff1" 
                    Binding="{Binding Change}" Header="Net Chng" 
                    Width="*" IsReadOnly="True"
                    Foreground="{Binding Change,Converter={StaticResource negativeToColor}}">
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)

和转换器

public class negativeToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        SolidColorBrush brush = new SolidColorBrush(Colors.LimeGreen);
        double doubleValue = 0.0;
        Double.TryParse(value.ToString(), out doubleValue);

        if (doubleValue < 0)
            brush = new SolidColorBrush(Colors.Red);

        return brush;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

但转换器显示没有效果。

在此处输入图片说明

dov*_*vid 6

这是因为所有常规DataGridColumn绑定都是DataGrid元素的相对对象,而不是行。在 DataGrid 级别中没有名为 的属性Change,仅在行级别中。

解决方法是:使用DataGridTemplateColumn.

<DataGridTemplateColumn Header="Net Chng" Width="*" IsReadOnly="True">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Change}" Foreground="{Binding Change, Converter={StaticResource negativeToColorConverter}}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

编辑:有关更多解决方案,请参阅在 WPF 数据网格文本列中绑定