protected override Point GetToolTipPosition(HoverableShape sender, List <HoverableShape> sibilings) { DataToolTip.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var x = sender.Value.X > (Min.X + Max.X) / 2 ? ToPlotArea(sender.Value.X, AxisTags.X) - 10 - DataToolTip.DesiredSize.Width : ToPlotArea(sender.Value.X, AxisTags.X) + 10; var y = sender.Value.Y > (Min.Y + Max.Y) / 2 ? ToPlotArea(sender.Value.Y, AxisTags.Y) + 10 : ToPlotArea(sender.Value.Y, AxisTags.Y) - 10 - DataToolTip.DesiredSize.Height; return(new Point(x, y)); }
protected virtual Point GetToolTipPosition(HoverableShape sender, List <HoverableShape> sibilings) { DataToolTip.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var x = sender.Value.X > (Min.X + Max.X) / 2 ? ToPlotArea(sender.Value.X, AxisTags.X) - 10 - DataToolTip.DesiredSize.Width : ToPlotArea(sender.Value.X, AxisTags.X) + 10; var y = ToPlotArea(sibilings.Select(s => s.Value.Y).DefaultIfEmpty(0).Sum() / sibilings.Count, AxisTags.Y); y = y + DataToolTip.DesiredSize.Height > ActualHeight ? y - (y + DataToolTip.DesiredSize.Height - ActualHeight) - 5 : y; return(new Point(x, y)); }
public override void DataMouseEnter(object sender, MouseEventArgs e) { if (DataToolTip == null) { return; } DataToolTip.Visibility = Visibility.Visible; TooltipTimer.Stop(); var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender)); if (senderShape == null) { return; } senderShape.Target.Stroke = senderShape.Series.Stroke; senderShape.Target.Fill = new SolidColorBrush { Color = PointHoverColor }; var scatterToolTip = DataToolTip as ScatterTooltip; if (scatterToolTip != null) { scatterToolTip.PrimaryAxisTitle = PrimaryAxis.Title; scatterToolTip.PrimaryValue = PrimaryAxis.LabelFormatter == null ? senderShape.Value.Y.ToString(CultureInfo.InvariantCulture) : PrimaryAxis.LabelFormatter(senderShape.Value.Y); scatterToolTip.SecondaryAxisTitle = SecondaryAxis.Title; scatterToolTip.SecondaryValue = SecondaryAxis.LabelFormatter == null ? senderShape.Value.X.ToString(CultureInfo.InvariantCulture) : SecondaryAxis.LabelFormatter(senderShape.Value.X); } var p = GetToolTipPosition(senderShape, null); DataToolTip.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation { To = p.X, Duration = TimeSpan.FromMilliseconds(200) }); DataToolTip.BeginAnimation(Canvas.TopProperty, new DoubleAnimation { To = p.Y, Duration = TimeSpan.FromMilliseconds(200) }); }
private void AxisInteractionCanvas_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e) { var point = new Point(double.NegativeInfinity, double.NegativeInfinity); if (!Standalone) { Plot(point, EventMessage.MouseOn); Cross.PlotToParent(point, EventMessage.MouseOn); DataToolTip.PlotToParent(point, EventMessage.MouseOn); } else { PlotStandalone(point, EventMessage.MouseOn); Cross.PlotToParentStandalone(point, EventMessage.MouseOn); DataToolTip.PlotToParentStandalone(point, EventMessage.MouseOn); } }
protected override Point GetToolTipPosition(HoverableShape sender, List <HoverableShape> sibilings) { DataToolTip.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var unitW = ToPlotArea(1, AxisTags.X) - PlotArea.X + 5; var overflow = unitW - MaxColumnWidth > 0 ? unitW - MaxColumnWidth : 0; unitW = unitW > MaxColumnWidth ? MaxColumnWidth : unitW; var x = sender.Value.X + 1 > (Min.X + Max.X) / 2 ? ToPlotArea(sender.Value.X, AxisTags.X) + overflow * .5 - DataToolTip.DesiredSize.Width : ToPlotArea(sender.Value.X, AxisTags.X) + unitW + overflow * .5; var y = ToPlotArea(sibilings.Where(s => s.Series is StackedBarSeries).Select(s => s.Value.Y).DefaultIfEmpty(0).Sum() * 0.5, AxisTags.Y); y = y + DataToolTip.DesiredSize.Height > ActualHeight ? y - (y + DataToolTip.DesiredSize.Height - ActualHeight) - 5 : y; return(new Point(x, y)); }
private void AxisInteractionVisual_MouseMove(object sender, System.Windows.Input.MouseEventArgs e) { if (ParentElement == null || !ParentElement.IsMouseOver) { return; } var point = e.GetPosition(this); Cross.VisualData = VisualData; DataToolTip.VisualData = VisualData; if (!Standalone) { Plot(point, EventMessage.MouseOn); Cross.PlotToParent(point, EventMessage.MouseOn); DataToolTip.PlotToParent(point, EventMessage.MouseOn); } else { PlotStandalone(point, EventMessage.MouseOn); Cross.PlotToParentStandalone(point, EventMessage.MouseOn); DataToolTip.PlotToParentStandalone(point, EventMessage.MouseOn); } }
public virtual void DataMouseEnter(object sender, MouseEventArgs e) { if (DataToolTip == null) { return; } DataToolTip.Visibility = Visibility.Visible; TooltipTimer.Stop(); var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender)); if (senderShape == null) { return; } var sibilings = HoverableShapes .Where(s => Math.Abs(s.Value.X - senderShape.Value.X) < S.X * .001).ToList(); var first = sibilings.Count > 0 ? sibilings[0] : null; var labels = SecondaryAxis.Labels != null?SecondaryAxis.Labels.ToArray() : null; var vx = first != null ? first.Value.X : 0; vx = AlphaLabel ? (int)(vx / (360d / Series.First().PrimaryValues.Count)) : vx; foreach (var sibiling in sibilings) { if (ShapeHoverBehavior == ShapeHoverBehavior.Dot) { sibiling.Target.Stroke = sibiling.Series.Stroke; sibiling.Target.Fill = new SolidColorBrush { Color = PointHoverColor }; } else { sibiling.Target.Opacity = .8; } } var indexedToolTip = DataToolTip as IndexedTooltip; if (indexedToolTip != null) { indexedToolTip.Header = labels == null ? (SecondaryAxis.LabelFormatter == null ? vx.ToString(CultureInfo.InvariantCulture) : SecondaryAxis.LabelFormatter(vx)) : (labels.Length > vx ? labels[(int)vx] : ""); indexedToolTip.Data = sibilings.Select(x => new IndexedTooltipData { Index = Series.IndexOf(x.Series), Series = x.Series, Point = x.Value, Value = PrimaryAxis.LabelFormatter == null ? x.Value.Y.ToString(CultureInfo.InvariantCulture) : PrimaryAxis.LabelFormatter(x.Value.Y) }).ToArray(); } var p = GetToolTipPosition(senderShape, sibilings); DataToolTip.BeginAnimation(Canvas.LeftProperty, new DoubleAnimation { To = p.X, Duration = TimeSpan.FromMilliseconds(200) }); DataToolTip.BeginAnimation(Canvas.TopProperty, new DoubleAnimation { To = p.Y, Duration = TimeSpan.FromMilliseconds(200) }); }