c# WPF中数据网格的颜色单元格

本文关键字:颜色 单元格 网格 数据网 WPF 数据 | 更新日期: 2023-09-27 18:17:16

我正在开发一个程序,该程序检查给定电网的总线电压,并将这些电压显示在DataGrid中。用户可以设置边界,认为总线电压为"正常",超出这些限制的电压被标记为错误。

Example:
Upper limit: 1.05
Lower limit: 0.95
  1     2     3
A 0.93  0.96  1.02
B 1.03  0.91  1.08
C 0.95  1.00  0.98
Therefore the erroneous will be: A1, B2 and B3

我想把错误单元格涂成红色。

我见过许多通过XAML解决问题的答案。我是WPF的新手,但是所有的XAML解决方案似乎都是静态的,并且在设计时定义,我需要的是在运行时更改颜色,因为用户可以更改标准。

基本上我想要的是根据动态参数改变颜色。并且不是在所有列中,因为表中包含其他不是电压的参数,例如角度和电流。

任何帮助都是感激的。

c# WPF中数据网格的颜色单元格

您需要一个ValueConverter或MultiValueConverter。下面是一个简单的例子,"应该"工作,但由于我是根据记忆写的,它可能会有一点错误,但应该给你一个想法。

[ValueConversion(typeof(decimal), typeof(Brush))]
public class BusVoltagesColorConverter : MarkupExtension, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null || !(value is decimal))
        {
            return DependencyProperty.UnsetValue;
        }
        var d = (decimal) value;
        decimal lowerLimit = 0.95m; //TODO get your value from your user settings here
        decimal upperLimit = 1.05m;
        if (d < lowerLimit || d > upperLimit)
        {
            return Brushes.Red;
        }
        return Brushes.Black;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return new BusVoltagesColorConverter();
    }
}

然后在您的WPF页面上,您需要将其添加为资源。之后,它只是将转换器附加到前景或背景的数据绑定上。