Code: Select all
var cursorValueDisplay = new AnnotationXY(moduleModel.mainChart.ViewXY, moduleModel.mainChart.ViewXY.XAxes[0], moduleModel.mainChart.ViewXY.YAxes[0]);
cursorValueDisplay.Style = AnnotationStyle.Rectangle;
cursorValueDisplay.LocationCoordinateSystem = CoordinateSystem.RelativeCoordinatesToTarget;
cursorValueDisplay.LocationRelativeOffset.X = 15;
cursorValueDisplay.LocationRelativeOffset.Y = 0;
cursorValueDisplay.TargetAxisValues.X = 0;//*AQChartUpdate Target.X = 0;
cursorValueDisplay.TargetAxisValues.Y = 0;// *AQChartUpdate Target.Y = 0;
cursorValueDisplay.Anchor.X = 0;
//cursorValueDisplay.Anchor.Y = 0;
cursorValueDisplay.TextStyle.Font = new WpfFont(System.Drawing.FontFamily.GenericMonospace, 10.0F, System.Drawing.FontStyle.Regular);
cursorValueDisplay.TextStyle.Color = Colors.Black;
cursorValueDisplay.Text = "begintext";
cursorValueDisplay.Fill.Color = Colors.White;
cursorValueDisplay.Fill.GradientColor = Colors.Cyan.FromArgb(120);
cursorValueDisplay.Visible = false;
cursorValueDisplay.Behind = false;
cursorValueDisplay.TargetMoveByMouse = false;
cursorValueDisplay.RotateByMouse = false;
cursorValueDisplay.MouseInteraction = false;
cursorValueDisplay.ClipInsideGraph = false; //*AQChart Update LimitInsideGraphMargins = false;
cursorValueDisplay.Sizing = AnnotationXYSizing.ScreenCoordinates;
var size = moduleModel.mainChart.MeasureText(cursorValueDisplay.Text, cursorValueDisplay.TextStyle.Font);
cursorValueDisplay.SizeScreenCoords.Width = size.X + 20;
cursorValueDisplay.SizeScreenCoords.Height = size.Y + 20;
moduleModel.mainChart.ViewXY.Annotations.Add(cursorValueDisplay);
moduleModel.mainChart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (moduleModel.mainChart.ViewXY.XAxes[0].Maximum - moduleModel.mainChart.ViewXY.XAxes[0].Minimum) / 2;
UpdateCursorResult();
moduleModel.mainChart.ViewXY.LineSeriesCursors[0].ValueAtXAxis = (moduleModel.mainChart.ViewXY.XAxes[0].Maximum - moduleModel.mainChart.ViewXY.XAxes[0].Minimum) / 2;
moduleModel.mainChart.ViewXY.LineSeriesCursors[0].Visible = true;
private void UpdateCursorResult(){
moduleModel.mainChart.BeginUpdate();
var lineSeriesCursor = moduleModel.mainChart.ViewXY.LineSeriesCursors[0];
if (moduleModel.mainChart.ViewXY.Annotations.Count == 0) return;
var cursorValueDisplay = moduleModel.mainChart.ViewXY.Annotations[0];
UpdateValueAtLegendBox();
// Update date and time string of X-axis value annotation
var cursorDate = moduleModel.mainChart.ViewXY.XAxes[0].AxisValueToDateTime(lineSeriesCursor.ValueAtXAxis);
var diffDate = DateTime.Now.Subtract(cursorDate);
var labels = new string[] { "Time: ", "Date: ", "Offset: " };
var padLength = labels.Max(l => l.Length);
StringBuilder sbCursorText = new StringBuilder();
sbCursorText.AppendLine(string.Format("{0}{1}", labels[0].PadRight(padLength), moduleModel.mainChart.ViewXY.XAxes[0].TimeString(lineSeriesCursor.ValueAtXAxis, "HH:mm:ss")));
sbCursorText.AppendLine(string.Format("{0}{1}", labels[1].PadRight(padLength), moduleModel.mainChart.ViewXY.XAxes[0].TimeString(lineSeriesCursor.ValueAtXAxis, "ddd dd/MM/yyyy")));
sbCursorText.AppendLine(string.Format("{0}{1} day(s) {2:00}:{3:00}:{4:00}", labels[2].PadRight(padLength), diffDate.Days, diffDate.Hours, diffDate.Minutes, diffDate.Seconds));
cursorValueDisplay.Text = sbCursorText.ToString();
//Set annotation target. The location is relative to target.
//Use graph bottom as target Y value.
var size = moduleModel.mainChart.MeasureText(cursorValueDisplay.Text, cursorValueDisplay.TextStyle.Font);
cursorValueDisplay.SizeScreenCoords.Width = size.X + 70;
cursorValueDisplay.SizeScreenCoords.Height = size.Y + 20;
var fTargetYCoord = (float)(moduleModel.mainChart.RenderSize.Height - cursorValueDisplay.SizeScreenCoords.Height / 2);
double dY = 0;
moduleModel.mainChart.ViewXY.YAxes[0].CoordToValue(fTargetYCoord, out dY);
PositionAnnotationLabelXAxis(lineSeriesCursor, cursorValueDisplay);
cursorValueDisplay.LocationRelativeOffset.Y = 0;
cursorValueDisplay.TargetAxisValues.X = lineSeriesCursor.ValueAtXAxis;
cursorValueDisplay.TargetAxisValues.Y = dY;
cursorValueDisplay.Visible = true;
cursorValueDisplay.ChangeOrder(OrderChangeAction.BringToFront);
moduleModel.mainChart.EndUpdate();
}