2013-06-05 3 views
0

주어진 그리드의 버스 전압을 검토하는 프로그램을 개발 중이며 이러한 전압은 DataGrid에 표시됩니다. 사용자는 전압이 잘못된 것으로 표시된 한계 밖의 버스 전압을 "정상"으로 간주하도록 경계를 설정할 수 있습니다.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 솔루션은 정적이며 디자인 타임에 정의 된 것으로 보이며 사용자가 기준을 변경할 수 있으므로 런타임에 색상을 변경해야합니다.

기본적으로 원하는 것은 동적 매개 변수를 기반으로 색상을 변경하는 것입니다. 테이블에는 각도 및 전류와 같은 전압이 아닌 다른 매개 변수가 포함되어 있기 때문에 모든 열에 포함되지는 않습니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

가능한 중복 [값에 따라 데이터 격자 셀 색상 변경] (http://stackoverflow.com/questions/5549617/change-datagrid-cell-colour-based-on-values) –

답변

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 페이지에서 리소스로 추가해야합니다. 그 후 전경이나 배경에 대한 데이터 바인딩에 변환기를 연결하는 것입니다.