更改关于Range的DataGrid Cell WPF的颜色

时间:2011-08-08 18:37:36

标签: c# wpf xaml datagrid controls

嗨我需要实现一个函数,如果绑定项的值在特定范围内,则单元格颜色应该根据范围。

我一直在使用Changing Background Color Of DataGrid Cell WPF 4

这种方法很好,但只有当那些值存在时才会有效。如果我想添加范围,即从10 - 20它是红色21-30它是蓝色

添加了所有内容并在最后看到了一个示例,但颜色没有改变,这里是代码

 public class ConvertToBrush : IValueConverter
    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int tempValue = int.Parse(value.ToString());
            string tempString = "Red";
            if (tempValue >= 0 && tempValue <= 20)
                tempString = "#FF0000";

            if (tempValue > 20 && tempValue <= 40)
                tempString = "#F09300";

            if (tempValue > 40 && tempValue <= 60)
                tempString = "#EDDF00";

            if (tempValue > 60 && tempValue <= 80)
                tempString = "#FFFFFF";

            if (tempValue > 80 && tempValue <= 100)
                tempString = "#85AB00";


            SolidColorBrush brush = new SolidColorBrush();
            BrushConverter conv = new BrushConverter();
            brush = conv.ConvertFromString(tempString) as SolidColorBrush;
            return brush;

        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {

            return DependencyProperty.UnsetValue;
        }
    }

XMAL

  <DataGridTextColumn ElementStyle="{StaticResource CentreAlignStyle}" Binding="{Binding TestResults}" Header="Results" IsReadOnly="True" MaxWidth="60" MinWidth="60" >
                                        <DataGridTextColumn.CellStyle>
                                            <Style>
                                                <Setter Property="TextBlock.Background" Value="{Binding TestResults, Converter={StaticResource makeBrush}}" />
                                            </Style>
                                        </DataGridTextColumn.CellStyle>
                                    </DataGridTextColumn>

2 个答案:

答案 0 :(得分:4)

请勿使用DataTrigger,只需将Background绑定到该值,然后输入ValueConverter即可返回正确的画笔(或根本不使用画笔)。

修改:用法应如何:

<DataGridTextColumn.CellStyle>
    <Style>
         <Setter Property="Border.Background" Value="{Binding TestResults, Converter={StaticResource BrushConverter}}" />
    </Style>
</DataGridTextColumn.CellStyle>

答案 1 :(得分:1)

我不确定我是否理解你,但是这里有:

因此,让我们说“TestResults”包含您正在谈论的价值。在XAML中:

<DataGridTextColumn TextBlock.Background={Binding TestResults, Converter={StaticResource makeBrush}} />

为了确保我们在这里的同一页,您可以在XAML中定义转换器,如下所示:

    <Window.Resources>
        <local:makeBrush x:Key="makeBrush" />
    </Window.Resources>

在makeBrush转换器中,您可以这样做:

public class makeBrush : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int theValueToConvertToColor = (int)value;
        if (theValueToConvertToColor > 10 && theValueToConvertToColor <= 20)
        {
            return Brushes.Red;
        }
        if (theValueToConvertToColor > 20 && theValueToConvertToColor <= 30)
        {
            return Brushes.Blue;
        }
        //More ifs...
        else return Brushes.Green;            
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
}

object value Convert方法中的“IValueConverter”实际上是“TestResults”的值

注意:我实际上没有用DataGridTextColumn测试它,但我想你明白了,如果需要可以进行必要的调整。