using SciChart.Charting.Model.DataSeries; using SciChart.Examples.ExternalDependencies.Data; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; namespace SciChart_BindSciCharttoData.RetryBandSeries { /// /// Interaction logic for RetryBandSeries.xaml /// public partial class RetryBandSeries : UserControl { public RetryBandSeries() { InitializeComponent(); this.Loaded += RetryBandSeries_Loaded; } private void RetryBandSeries_Loaded(object sender, RoutedEventArgs e) { InitBandSeries(); } private void InitBandSeries() { var times = new double[20]; var dataSource = new RandomWalkGenerator(); var ydatas = new List(); var y1datas = new List(); for (int i = 0; i < 20; i++) { times[i] = i; ydatas.Add(dataSource.GetRandomDouble()); y1datas.Add(dataSource.GetRandomDouble()); } var metaData = GetMetaDatas(ydatas, y1datas); var seriesData = new XyyDataSeries(); seriesData.Append(times, ydatas, y1datas, metaData); MyBandSeries.PaletteProvider = new MyCustomPalette(); MyBandSeries.DataSeries = seriesData; } private List GetMetaDatas(List y0Vlues, List y1Values) { List returnDatas = new List(); for (int i = 0; i < y0Vlues.Count; i++) { if (i == 0) { returnDatas.Add(new MyCustomPointMetaData(y0Vlues[i], y1Values[i], 0, 0)); } else { returnDatas.Add(new MyCustomPointMetaData(y0Vlues[i], y1Values[i], y0Vlues[i - 1], y1Values[i - 1])); } } return returnDatas; } } } public class MyCustomPointMetaData : IPointMetadata { public event PropertyChangedEventHandler PropertyChanged; public bool IsSelected { get; set; } public double Y0 { get; set; } public double Y1 { get; set; } public double Py0 { get; set; } public double Py1 { get; set; } public MyCustomPointMetaData(double y0, double y1, double py0, double py1) { this.Y0 = y0; this.Y1 = y1; this.Py0 = py0; this.Py1 = py1; } } using SciChart.Charting.Model.DataSeries; using SciChart.Charting.Visuals.PaletteProviders; using SciChart.Charting.Visuals.RenderableSeries; using System.Windows.Media; namespace SciChart_BindSciCharttoData.RetryBandSeries { public class MyCustomPalette : IFillPaletteProvider, IStrokePaletteProvider { public void OnBeginSeriesDraw(IRenderableSeries rSeries) { } public Color? OverrideStrokeColor(IRenderableSeries rSeries, int index, IPointMetadata metadata) { return null; } public Brush OverrideFillBrush(IRenderableSeries rSeries, int index, IPointMetadata metadata) { var data = metadata as MyCustomPointMetaData; if (data != null) { if (data.Y0 > data.Y1) { return new SolidColorBrush(Colors.OrangeRed); } else { return new SolidColorBrush(Colors.SeaGreen); } } return null; } } }