首页 文章

C#WPF中DataGrid的颜色单元格

提问于
浏览
0

我正在开发一个程序来检查给定网格的总线电压,这些电压显示在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解决方案似乎都是静态的,并且在设计时定义,我需要的是在运行时更改颜色,因为用户可以更改标准 .

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

任何帮助表示赞赏 . 先感谢您 .

1 回答

  • 0

    您需要ValueConverter或MultiValueConverter . 下面是一个简单的例子"should"工作,但是当我从内存中写下它时可能会稍微有点错误,但应该给你一个想法 .

    [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页面上,您需要将其添加为资源 . 之后,它只是将转换器附加到前景或背景的数据绑定上 .

相关问题