Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF DataGrid-分级色标上的颜色单元格_C#_Wpf_Colors_Converter - Fatal编程技术网

C# WPF DataGrid-分级色标上的颜色单元格

C# WPF DataGrid-分级色标上的颜色单元格,c#,wpf,colors,converter,C#,Wpf,Colors,Converter,我试图找出是否有一种方法可以在色阶上给单个细胞着色。特别是,我希望在下面得到类似奖金栏的东西: 目前,我已将datagrid的columns后台属性设置为绑定到以下转换器: public class NameToBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalizat

我试图找出是否有一种方法可以在色阶上给单个细胞着色。特别是,我希望在下面得到类似奖金栏的东西:

目前,我已将datagrid的columns后台属性设置为绑定到以下转换器:

        public class NameToBrushConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double? input = value as double?;
            if(input<-5)
            {
                return Brushes.MediumVioletRed;
            }
            if(-5<=input && input<-0.5)
            { 
                return Brushes.IndianRed;
            }
            if (.5 <= input && input < 5)
            { 
                return Brushes.LightGreen; 
            }
            if (5 <= input)
            { 
                return Brushes.LawnGreen; 
            } 

             return DependencyProperty.UnsetValue;            
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
}
公共类名称ToBrushConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
双精度输入=双精度值?;

如果(输入我创建了一个ValueToBrushConverter。您可以这样使用它:

Background="{Binding Path=YourDoubleValue,
                     Converter={StaticResource ValueToBrushConverter},
                     ConverterParameter='YourMinDouble|YourMaxDouble'}"
这将创建从绿色(
YourMinDouble
)到红色(
YourMaxDouble
)的渐变色阶然后为
YourDoubleValue
选择相关颜色
YourMinDouble
可以是负片,但必须小于
YourMaxDouble
。如果
YourDoubleValue
不在范围内,则返回
画笔。透明

根据您的需要定制

转换器类

[ValueConversion(typeof(double), typeof(Brush))]
class ValueToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        double number = (double)value;
        double min = 0;
        double max = 100;

        // Get the value limits from parameter
        try
        {
            string[] limits = (parameter as string).Split(new char[] { '|' });
            min = double.Parse(limits[0], CultureInfo.InvariantCulture);
            max = double.Parse(limits[1], CultureInfo.InvariantCulture);
        }
        catch (Exception)
        {
            throw new ArgumentException("Parameter not valid. Enter in format: 'MinDouble|MaxDouble'");
        }

        if (max <= min)
        {
            throw new ArgumentException("Parameter not valid. MaxDouble has to be greater then MinDouble.");
        }

        if (number >= min && number <= max)
        {
            // Calculate color channels
            double range = (max - min) / 2;
            number -= max - range;
            double factor = 255 / range;
            double red = number < 0 ? number * factor : 255;
            double green = number > 0 ? (range - number) * factor : 255;

            // Create and return brush
            Color color = Color.FromRgb((byte)red, (byte)green, 0);
            SolidColorBrush brush = new SolidColorBrush(color);
            return brush;
        }

        // Fallback brush
        return Brushes.Transparent;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
[ValueConversion(typeof(double)、typeof(Brush))]
类值ToBrushConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
双精度数=(双精度)值;
双最小值=0;
双倍最大值=100;
//从参数获取值限制
尝试
{
string[]limits=(参数为string).Split(新字符[]{'|'});
min=double.Parse(限制[0],CultureInfo.InvariantCulture);
max=double.Parse(限制[1],CultureInfo.InvariantCulture);
}
捕获(例外)
{
抛出新的ArgumentException(“参数无效。输入格式为:'MinDouble | MaxDouble'”);
}
如果(最大值=最小值和编号0)(范围-编号)*系数:255;
//创建并返回笔刷
颜色=颜色。从RGB((字节)红色,(字节)绿色,0);
SolidColorBrush笔刷=新的SolidColorBrush(颜色);
回刷;
}
//回退刷
返回刷。透明;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}