first, I like your lightning chart a lot, I think, it's really great.
But maybe you can help me with one issue I have. I'm using V8.1.4. and Visual Studio 12.0.40629.
I have made the example below. I tried to strip down our real world project to the point, where I have two questions.
The example below works fine as it is. But then two things get strange:
- When I remove the comments from the line
// series.Clear();
I don't see anything at all. The complete chart control disappears and I have a blank window. I don't understand this, looks for me like a bug?
- Then I comment or remove the line
SetMarker(series, "Label", samples[2] + 0.5, 0);
and my chart control is visible again, but no data in it.
I would have expected no difference, if I make
Code: Select all
series.Clear();
series = null;
Code: Select all
series = null;
But everything I do with this variable still effects the chart. Is this intended to be so or do I make something wrong here?
In our real world project I have a crash at series = null; that I didn't have in V8.0. But there's a lot more going on in our project, so I was not able yet to reproduce this in a simple example.
MainWindow.xaml
Code: Select all
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lcusb="http://schemas.arction.com/semibindablecharting/ultimate/" x:Class="LCTest.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid x:Name="MainGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<lcusb:LightningChartUltimate x:Name="chart" Content="LightningChartUltimate" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<lcusb:LightningChartUltimate.ViewXY>
<lcusb:ViewXY>
<lcusb:ViewXY.YAxes>
<lcusb:AxisY/>
</lcusb:ViewXY.YAxes>
<lcusb:ViewXY.XAxes>
<lcusb:AxisX/>
</lcusb:ViewXY.XAxes>
</lcusb:ViewXY>
</lcusb:LightningChartUltimate.ViewXY>
</lcusb:LightningChartUltimate>
</Grid>
</Grid>
</Window>
Code: Select all
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Arction.Wpf.SemibindableCharting;
using Arction.Wpf.SemibindableCharting.Annotations;
using Arction.Wpf.SemibindableCharting.EventMarkers;
using Arction.Wpf.SemibindableCharting.SeriesXY;
using Arction.Wpf.SemibindableCharting.Views.ViewXY;
using Arction.Wpf.SemibindableCharting.Axes;
using Arction.Wpf.SemibindableCharting.Titles;
using Arction.Wpf.SemibindableCharting.ChartManager;
namespace LCTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CreateChart();
}
private void CreateChart()
{
var samples = new double[] { 3, 4, 1, 6, 7, 3, 4, 1, 7, 2, 2 };
for (int i = 0; i < 3; i++)
{
var series = new SampleDataSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);
series.FirstSampleTimeStamp = 0;
series.SamplingFrequency = 1;
series.AddSamples(samples, true);
SetMarker(series, "Label", samples[2] + 0.5, 0);
chart.ViewXY.SampleDataSeries.Add(series);
// series.Clear();
series = null;
for (int j = 0; j < samples.Count(); j++) samples[j]++;
}
}
private void SetMarker(SampleDataSeries series, string label, double x, double y = 0.0)
{
if (series.GetType().Name == "SampleDataSeries")
{
LineSeriesValueSolveResult result = ((SampleDataSeries)series).SolveYValueAtXValue(x);
if (result.SolveStatus == LineSeriesSolveStatus.OK)
{
// PointLineSeries may have two or more points at same X value. If so, center it between min and max
y = (result.YMax + result.YMin) / 2.0;
}
}
var seriesColor = Colors.Peru;
SeriesEventMarker eventMarker = new SeriesEventMarker(series);
eventMarker.Label.Color = seriesColor;
eventMarker.Label.Text = label;
eventMarker.Symbol.Shape = Arction.Wpf.SemibindableCharting.Shape.Circle;
eventMarker.Symbol.Color1 = Colors.Transparent;
eventMarker.Symbol.Height = 9;
eventMarker.Symbol.Width = 9;
eventMarker.Symbol.GradientFill = GradientFillPoint.Solid;
eventMarker.Symbol.BorderWidth = 2;
eventMarker.Symbol.BorderColor = seriesColor;
eventMarker.XValue = x;
eventMarker.YValue = y;
eventMarker.HorizontalPosition = SeriesEventMarkerHorizontalPosition.SnapToPoints;
eventMarker.VerticalPosition = SeriesEventMarkerVerticalPosition.TrackSeries;
eventMarker.MouseInteraction = false;
series.SeriesEventMarkers.Add(eventMarker);
}
}
}