如何根据点值动态地将LineChart线颜色更改为渐变?

时间:2015-07-07 06:48:21

标签: wpf wpftoolkit

我正在WPF(C#)中构建一个应用程序来接受数值列表并以折线图的形式显示它们。我正在使用Codeplex的WPF工具包来实现此目的。

我希望折线图将颜色更改为从蓝色到红色的渐变,因为值从125变为145.我使用了重写的LineDataPoint样式和ValuetoColorConverter来改变数据点的颜色但是我没有知道如何为点之间的线设置渐变。

此外,图例图标颜色显示为空白。

XAML:

<chartingToolkit:LineSeries                 
   Title="Systolic Pressure"
   ItemsSource="{Binding}"
   IndependentValuePath="recdatetime"
   DependentValuePath="systolic">

   <chartingToolkit:LineSeries.DataPointStyle>
       <Style TargetType="chartingToolkit:LineDataPoint" BasedOn="{StaticResource fullTooltips}">
           <Setter Property="Background">
               <Setter.Value>
                   <Binding Path="systolic" Converter="{StaticResource BPToColorConverter}">
                       <Binding.ConverterParameter>
                           <sys:Int32>1</sys:Int32>
                       </Binding.ConverterParameter>
                   </Binding>
               </Setter.Value>
           </Setter>           
       </Style>
   </chartingToolkit:LineSeries.DataPointStyle>

   <chartingToolkit:LineSeries.DependentRangeAxis>
       <chartingToolkit:LinearAxis
         x:Name="systolic_chart_yaxis"
         Orientation="Y"
         Title="BP (mmHg)"
         Minimum="50"
         Interval="5"
         ShowGridLines="True"/>
   </chartingToolkit:LineSeries.DependentRangeAxis>
   <chartingToolkit:LineSeries.IndependentAxis>
       <chartingToolkit:DateTimeAxis
          Orientation="X"
          Name="mainchart_timeaxis" 
          Interval="1"
          IntervalType="Days"
          ShowGridLines="False">
        </chartingToolkit:DateTimeAxis>
   </chartingToolkit:LineSeries.IndependentAxis>
</chartingToolkit:LineSeries>

有两个这样的系列。上面的代码在顶部提供了日X轴,而另一个在底部提供了小时X轴。

ColorConverter

 public class BPToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int input = (int)value;
        int r, g, b;
        SolidColorBrush valuecolor;
        if((int)parameter==1) //systolic
        { 
            if(input>=125)
            {
                if(input>145) input=145;
                r = (int)(((float)(input-125)/20) * 255);
                g = 0;
                b = 255 - r;
            }
            else if(input<110)
            {
                if(input<90) input=90;
                r = 0;
                g = 0;
                b = (int)(((float)(110 - input) / 25) * 255);
                b = 255 - b;
            }
            else
            {
                r=0;
                g=0;
                b=255;
            }

        }
        else //diastolic
        {
            if (input > 85)
            {
                if (input > 100) input = 100;
                r = (int)(((float)(input - 85) / 15) * 77);
                r += 102;
                g = (int)(((float)(input - 85) / 15) * 128);
                g = 255 - g;
                b = 0;
            }
            else if (input < 75)
            {
                if (input < 65) input = 65;
                r = ((int)((float)(input - 65) / 10) * 25);
                r += 76;
                g = ((int)((float)(input - 65) / 10) * 100);
                g += 153;
                b = ((int)((float)(input - 65) / 10) * 25);
            }
            else
            {
                r = 0;
                g = 255;
                b = 0;
            }
        }
        r %= 256;
        g %= 256;
        b %= 256;
        valuecolor = new SolidColorBrush(System.Windows.Media.Color.FromRgb((byte)r,(byte)g,(byte)b));
        return valuecolor;
    }
}

从SQLite数据库中检索值,并将其添加到自定义类的集合中。然后将该集合设置为图表的DataContext。

这是我到目前为止所得到的: Screenshot of the application

请告诉我如何将线条颜色设置为线条连接的两个数据点颜色之间的渐变。此外,请帮助我将每个lineseries的图例颜色固定为恒定颜色。

0 个答案:

没有答案