Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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)
            });
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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));
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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)
            });
        }