我正在开发一个程序来检查给定网格的总线电压,这些电压显示在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解决方案似乎都是静态的,并且在设计时定义,我需要的是在运行时更改颜色,因为用户可以更改标准。
基本上我想要的是根据动态参数改变颜色。而不是在所有列中,因为该表包含非电压的其他参数,例如角度和电流。
感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
您需要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页面上,您需要将其添加为资源。之后,它只是将转换器附加到前景或背景的数据绑定上。