|
public ObservableCollection<Data> GenerateData()
{
ObservableCollection<Data> datas = new ObservableCollection<Data>();
DateTime date = DateTime.Now;
.. .
}
|
|
<chart:CategoryAxis LabelFormat="hh:mm:ss"
ActualRangeChanged="CategoryAxis_ActualRangeChanged"
</chart:CategoryAxis> |
|
private void CategoryAxis_ActualRangeChanged(object sender, ActualRangeChangedEventArgs e)
{
e.ActualMinimum = (double)e.ActualMinimum - 20;
e.ActualMaximum = (double)e.ActualMaximum + 20;
}
|
|
<chart:SfChart.PrimaryAxis>
<chart:CategoryAxis LabelFormat="hh:mm:ss" Interval="7"
ActualRangeChanged="CategoryAxis_ActualRangeChanged"
AxisLineStyle="{StaticResource AxisStyle}"
MajorTickLineStyle="{StaticResource AxisStyle}">
…
</chart:CategoryAxis>
</chart:SfChart.PrimaryAxis> |
|
public MainWindow()
{
...
image.MouseMove += Image_MouseMove;
image.MouseLeftButtonUp += Image_MouseLeftButtonUp;
}
private void Image_MouseMove(object sender, MouseEventArgs e)
{
e.Handled = true;
}
private void Image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
..
info = Chart.GetType().GetMethod("UpdateBitmapToolTip", BindingFlags.NonPublic | BindingFlags.Instance);
info.Invoke(Chart, null);
} |
|
public MainWindow()
{
InitializeComponent();
Chart.MouseLeftButtonDown += Chart_MouseLeftButtonDown;
}
|
|
private void Chart_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
MethodInfo info = Chart.GetType().GetMethod("GetAdorningCanvas", BindingFlags.NonPublic | BindingFlags.Instance);
var adorningCanvasPoint = e.GetPosition(info.Invoke(Chart, null) as Canvas);
FieldInfo fieldInfo = Chart.GetType().GetField("adorningCanvasPoint", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo.SetValue(Chart, adorningCanvasPoint);
Point mousePoint = e.GetPosition(image);
foreach (var series in Chart.Series)
{
info = series.GetType().GetMethod("IsHitTestSeries", BindingFlags.NonPublic | BindingFlags.Instance);
var hitTest = (bool)info.Invoke(series, null);
if (hitTest)
{
double x, y, stackY;
adorningCanvasPoint.X = adorningCanvasPoint.X - Chart.SeriesClipRect.Left;
series.FindNearestChartPoint(adorningCanvasPoint, out x, out y, out stackY);
if (!double.IsNaN(x))
{
var data = (series.ItemsSource as ObservableCollection<Data>)[(int)x];
//you can use these values in your popup
var seriesLabel = series.Label;
var date = data.Date;
var value = y;
}
}
}
} |
<chart:SfChart.PrimaryAxis> <chart:CategoryAxis LabelFormat="hh:mm:ss" Interval="7" ActualRangeChanged="CategoryAxis_ActualRangeChanged" AxisLineStyle="{StaticResource AxisStyle}" MajorTickLineStyle="{StaticResource AxisStyle}"> … </chart:CategoryAxis> </chart:SfChart.PrimaryAxis> |
|
<chart:SfChart.PrimaryAxis>
<chart:DateTimeAxis LabelFormat="hh:mm:ss" Interval="25" IntervalType="Seconds"
ActualRangeChanged="CategoryAxis_ActualRangeChanged"
EdgeLabelsVisibilityMode="AlwaysVisible"
x:Name="dateTimeAxis"
AxisLineStyle="{StaticResource AxisStyle}"
MajorTickLineStyle="{StaticResource AxisStyle}">
<chart:ChartAxis.Header>
<TextBlock Margin="10" Text="Time" FontSize="16" FontFamily="SegoeUI"/>
</chart:ChartAxis.Header>
</chart:DateTimeAxis>
</chart:SfChart.PrimaryAxis> |
|
private void CategoryAxis_ActualRangeChanged(object sender, ActualRangeChangedEventArgs e)
{
e.VisibleMinimum = view.DynamicData[0].Date;
} |
|
..
if (Chart1_Sr2.XAxis != null)
Chart1_Sr2.XAxis.ActualRangeChanged -= XAxis_ActualRangeChanged;
Chart1_Sr2.XAxis = new DateTimeAxis()
{
IntervalType = DateTimeIntervalType.Seconds,
EdgeLabelsVisibilityMode=EdgeLabelsVisibilityMode.AlwaysVisible,
ShowGridLines = false, LabelFormat = "hh:mm:ss"
};
Chart1_Sr2.XAxis.LabelRotationAngle = 270;
Chart1_Sr2.XAxis.ActualRangeChanged += XAxis_ActualRangeChanged;
..
private void XAxis_ActualRangeChanged(object sender, ActualRangeChangedEventArgs e)
{
if (CommonGlobal.Bit != null && CommonGlobal.Bit.Count > 0)
e.VisibleMinimum = CommonGlobal.Bit[0].x;
}
.. |
|
..
DateTimeAxis axis = Chart1_Sr2.XAxis as DateTimeAxis;
if (axis == null)
{
axis = new DateTimeAxis();
Chart1_Sr2.XAxis = axis;
}
axis.IntervalType = DateTimeIntervalType.Seconds;
axis.EdgeLabelsVisibilityMode = EdgeLabelsVisibilityMode.AlwaysVisible;
axis.ShowGridLines = false;
axis.LabelFormat = "hh:mm:ss";
axis.LabelRotationAngle = 270;
..
private void CategoryAxis_ActualRangeChanged(object sender, ActualRangeChangedEventArgs e)
{
if (CommonGlobal.Bit != null && CommonGlobal.Bit.Count > 0)
e.VisibleMinimum = CommonGlobal.Bit[0].x;
} |
|
axis.ShowGridLines = true;
axis.LabelFormat = "hh:mm:ss"; |
|
axis.IntervalType = DateTimeIntervalType.Seconds;
axis.SmallTicksPerInterval = 4; |
|
case "5 Min":
...
Chart1_Sr2.XAxis = new CustomDateTimeAxis()
{
Interval = 25,
IntervalType = DateTimeIntervalType.Seconds,
ShowGridLines = true,
LabelFormat = "hh:mm:ss",
EdgeLabelsVisibilityMode = EdgeLabelsVisibilityMode.AlwaysVisible
};
Chart1_Sr2.XAxis.ActualRangeChanged += XAxis_ActualRangeChanged;
...
private void XAxis_ActualRangeChanged(object sender, ActualRangeChangedEventArgs e)
{
if (CommonGlobal.Bit != null && CommonGlobal.Bit.Count > 0)
{
e.VisibleMinimum = CommonGlobal.Bit[0].x;
if (CommonGlobal.Bit.Count > 0)
e.VisibleMaximum = CommonGlobal.Bit[CommonGlobal.Bit.Count - 1].x;
}
}
...
public class CustomDateTimeAxis : DateTimeAxis
{
protected override void GenerateVisibleLabels()
{
base.GenerateVisibleLabels();
VisibleLabels[VisibleLabels.Count-1]= new DateTimeAxisLabel(
VisibleRange.End,
VisibleRange.End.FromOADate().ToString(
LabelFormat,
CultureInfo.CurrentCulture),
VisibleRange.End);
}
} |
|
private void Chart_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
...
switch (seriesLabel)
{
case "Bit Depth":
date = DateTime.FromOADate(x);
value = y;
break; |
|
private void XAxis_ActualRangeChanged(object sender, ActualRangeChangedEventArgs e)
{
int visibleRange = 5;
if (CommonGlobal.Bit != null && CommonGlobal.Bit.Count > 0)
{
if (CommonGlobal.Bit.Count > visibleRange)
e.VisibleMinimum = CommonGlobal.Bit[CommonGlobal.Bit.Count - visibleRange].x;
else
e.VisibleMinimum = CommonGlobal.Bit[0].x;
if (CommonGlobal.Bit.Count > 0)
e.VisibleMaximum = CommonGlobal.Bit[CommonGlobal.Bit.Count - 1].x;
}
} |