簡體   English   中英

C#WPF中DataGrid的顏色單元格

[英]color cells of a DataGrid in C# WPF

我正在開發一個程序,該程序檢查給定網格的總線電壓,這些電壓顯示在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解決方案似乎都是靜態的,並且是在設計時定義的,我需要的是在運行時更改顏色,因為用戶可以更改標准。

基本上我想要的是根據動態參數更改顏色。 並且並非在所有列中,因為該表包含的不是電壓的其他參數,例如角度和電流。

任何幫助表示贊賞。 先感謝您。

您需要一個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頁面上將其添加為資源。 之后,它只是將轉換器附加到前景或背景的數據綁定上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM