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

标签 c# wpf

我希望 DataGridColumn 的前景色根据其值进行更改。我有

<DataGridTextColumn x:Name="Diff1" 
                    Binding="{Binding Change}" Header="Net Chng" 
                    Width="*" IsReadOnly="True"
                    Foreground="{Binding Change,Converter={StaticResource negativeToColor}}">
</DataGridTextColumn>

和转换器

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();
    }
}

但是转换器没有显示效果。

enter image description here

最佳答案

这是因为所有常规 DataGridColumn 绑定(bind)都是 DataGrid 元素的相关项,而不是 Row。在 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>

编辑:参见Binding in a WPF data grid text column了解更多解决方案。

关于c# - 如果值为负,WPF DataGridColumn 前景色变为红色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26893578/

相关文章:

c# - 在现有应用程序(Windows 或 Web).Net 中添加日志记录的最佳方式

c# - 我在属性 setter 中进入无限循环

wpf - WPF 工具栏有哪些优点?

C# wpf,从文本框绑定(bind)到 dataGridColumn

c# - WPF隐藏和显示按钮取决于datacontext的值

c# - 分两步将复选框值从 View 发送到 Controller ?

c# - 树莓派 CPU 温度

c# - Umbraco 后台保存验证

wpf - 如何在 WPF 应用程序中实现 Vista 玻璃透明度 (AERO)?

wpf - 求两点之间一点的坐标?