堆积面积图 - 如何在 Silverlight 中将定义系列动态添加到堆积面积图



我想编写代码,我可以动态地将新的随机值序列添加到Silverlight StackedAreaChart中。也就是说,每次用户在运行时单击按钮时,我都希望将不同颜色的新值系列添加到程序主 StackedAreaChart。

除了 Silverlight 可视化演示(堆叠区域示例)之外,我在互联网上找不到任何好的例子。

程序员用三个预定义的系列将其设置为静态,但我希望它是动态的并且无法弄清楚:-/

我现在花了 2 周的时间,任何帮助将不胜感激,因为我是这方面的新手:(

谢谢你! :)

最后,我抽出时间创建了一个动态随机序列的示例。

XAML 代码很简单:一个按钮和图表。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Button Content="Add random series" Click="AddSeries_Click" HorizontalAlignment="Center" />
    <chart:Chart x:Name="chart" Grid.Row="1">
        <chart:StackedAreaSeries />
    </chart:Chart>
</Grid>
代码

隐藏看起来相当复杂,但大多数代码用于生成随机数据。主代码在 AddSeries_Click 方法中。

public partial class MainPage : UserControl
{
    private string[] categories = new[] { "Apples", "Oranges", "Bananas", "Lemons" };
    private Random random = new Random((int)DateTime.Now.Ticks);
    private int lastSeriesYear = 2011;
    public MainPage()
    {
        InitializeComponent();
    }
    public class ChartItem
    {
        public string Title { get; set; }
        public double Value { get; set; }
    }
    private void AddSeries_Click(object sender, RoutedEventArgs e)
    {
        var sd = new SeriesDefinition();
        sd.ItemsSource = categories.Select(c => new ChartItem { Title = c, Value = random.Next(30, 35) }).ToList();
        sd.Title = (lastSeriesYear--).ToString();
        sd.IndependentValuePath = "Title";
        sd.DependentValuePath = "Value";
        ((StackedAreaSeries)this.chart.Series[0]).SeriesDefinitions.Add(sd);
    }
}

如果您更喜欢使用视图模型和可观察集合而不是代码隐藏,我有一个扩展的图表类,它允许数据绑定到系列列表。但是它需要更多的代码,所以让我们有一个带有代码隐藏的示例。

最新更新