2013-06-05 62 views
0

我正在開發一個程序,該程序查看給定網格的總線電壓,並且這些電壓顯示在DataGrid中。 用戶可以設置邊界以將總線電壓視爲「正常」,超出這些電壓被標記爲錯誤的極限。C#中的DataGrid的顏色單元格WPF

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

[更改基於值的DataGrid單元格顏色]的可能重複(http://stackoverflow.com/questions/5549617/change-datagrid-cell-colour-based-on-values) –

回答

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

相關問題