更改LineSeries的颜色

时间:2015-08-16 20:55:06

标签: c# wpf xaml

希望有人可以提供帮助。到目前为止,我已经花了大约4个小时尝试在论坛上找到的例子来做这件事无济于事。下面是我的XAML代码;我认为有一种简单的方法可以插入一个参数来设置颜色,但是我找不到有效的颜色。

我也尝试过代码;我发现的所有例子都没有改变任何东西。

<h1>

这是我调用窗口的代码

<Grid>
    <charting:Chart Name="lineChart"
                                   Title="Stock" 
                                   VerticalAlignment="Top" 
                                   Margin="0,10,10,0" 
                                   Height="550">
        <charting:LineSeries Name="Price"
                                            Title="Price"  
                                            DependentValuePath="Value" 
                                            IndependentValuePath="Key"
                                            ItemsSource="{Binding [0]}"
                                            IsSelectionEnabled="True"/>
        <charting:LineSeries Name="SMA50" 
                                            Title="50 SMA"  
                                            DependentValuePath="Value" 
                                            IndependentValuePath="Key"
                                            ItemsSource="{Binding [1]}"
                                            IsSelectionEnabled="True"/>
        <charting:LineSeries Name="SMA200" 
                                            Title="200 SMA"  
                                            DependentValuePath="Value" 
                                            IndependentValuePath="Key"
                                            ItemsSource="{Binding [2]}"
                                            IsSelectionEnabled="True"/>
    </charting:Chart>
</Grid>

任何帮助都会很棒。在我看来,Windows格式的图表版本比WPF版本使用起来要简单得多。

2 个答案:

答案 0 :(得分:1)

使用DataPointStyle属性指定它:

<charting:LineSeries Name="Price"
                    Title="Price"  
                    DependentValuePath="Value" 
                    IndependentValuePath="Key"
                    ItemsSource="{Binding [0]}"
                    IsSelectionEnabled="True"
                    DataPointStyle="{StaticResource myDataPointStyle}" />

在这种情况下,我假设是静态资源:

    <Style x:Key="myDataPointStyle" TargetType="{x:Type charting:LineDataPoint}">
        <Setter Property="Background" Value="Blue"/>
    </Style>

如果您需要动态执行此操作并且不想使用数据绑定,那么您当然也可以以编程方式执行此操作:

var style = new Style();
style.TargetType = typeof(LineDataPoint);
style.Setters.Add(new Setter(BackgroundProperty, Brushes.Blue));
this.Price.DataPointStyle = style;

答案 1 :(得分:0)

我没有图表经验,但我想帮忙。

有些事情看起来很奇怪。

  1. 您绑定到网格DataContext {Binding [0]}中的元素但从未设置它。

  2. 您正在创建一个Graph类并尝试显示它,但它没有以任何方式连接到视图。

  3. 这应该在构造函数中起作用: (为窗口设置DataContext,因为您的视图绑定到该窗口)

    public MainWindow()
    {
        List<KeyValuePair<DateTime, int>> listPrice = new List<KeyValuePair<DateTime, int>>();
        List<KeyValuePair<DateTime, int>> listSMA50 = new List<KeyValuePair<DateTime, int>>();
        List<KeyValuePair<DateTime, int>> listSMA200 = new List<KeyValuePair<DateTime, int>>();
    
        DateTime d = new DateTime(2000, 1, 1);
    
        for (int i = 1; i < 10; i++)
        {
            listPrice.Add(new KeyValuePair<DateTime, int>(d, i));
            listSMA50.Add(new KeyValuePair<DateTime, int>(d, i * 2));
            listSMA200.Add(new KeyValuePair<DateTime, int>(d, i * 3));
            d = d.AddDays(1.0);
        }
    
    
        var dataSourceList = new List<List<KeyValuePair<DateTime, int>>>();
        dataSourceList.Add(listPrice);
        dataSourceList.Add(listSMA50);
        dataSourceList.Add(listSMA200);
    
        this.DataContext = dataSourceList;
    
        InitializeComponent();
    }
    
  4. 更新

    这会改变笔画宽度,但由于某种原因,颜色不会改变。

        private void bGraph_Click(object sender, RoutedEventArgs e)
        {
            var style = new Style(typeof(Polyline));
            style.Setters.Add(new Setter(Polyline.StrokeProperty, Brushes.Red));
            style.Setters.Add(new Setter(Polyline.StrokeThicknessProperty, 5.0));
    
            ((LineSeries) lineChart.Series[0]).PolylineStyle = style;
            ((LineSeries) lineChart.Series[1]).PolylineStyle = style;
            ((LineSeries) lineChart.Series[2]).PolylineStyle = style;
        }