private void PrepareCanvas(bool animate = false) { if (Series == null) { return; } foreach (var shape in Shapes) { Canvas.Children.Remove(shape); } foreach (var shape in HoverableShapes.Select(x => x.Shape).ToList()) { Canvas.Children.Remove(shape); } foreach (var serie in Series) { Canvas.Children.Remove(serie); } HoverableShapes = new List <HoverableShape>(); Shapes = new List <FrameworkElement>(); foreach (var serie in Series) { Canvas.Children.Add(serie); EraseSerieBuffer.Add(serie); serie.RequiresAnimation = animate; serie.RequiresPlot = true; } Canvas.Width = ActualWidth * CurrentScale; Canvas.Height = ActualHeight * CurrentScale; PlotArea = new Rect(0, 0, ActualWidth * CurrentScale, ActualHeight * CurrentScale); RequiresScale = true; }
public override void OnDataMouseLeave(object sender, MouseEventArgs e) { var s = sender as Shape; if (s == null) { return; } var shape = HoverableShapes.FirstOrDefault(x => Equals(x.Shape, s)); if (shape == null) { return; } shape.Target.Fill = new SolidColorBrush { Color = shape.Serie.Color }; shape.Target.Stroke = new SolidColorBrush { Color = PointHoverColor }; Canvas.Children.Remove(CurrentToolTip); }
public override void DataMouseEnter(object sender, MouseEventArgs e) { //This code is maybe going to be removed. I think Pie charts do not need hover, they work better //if we print just values on charts //var b = new Border //{ // BorderThickness = new Thickness(0), // Background = new SolidColorBrush { Color = Color.FromRgb(30, 30, 30), Opacity = .8 }, // CornerRadius = new CornerRadius(1) //}; //var sp = new StackPanel //{ // Orientation = Orientation.Vertical //}; var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender)); var pieSlice = senderShape != null ? senderShape.Shape as PieSlice : null; if (pieSlice == null) { return; } pieSlice.Opacity = .8; //sp.Children.Add(new TextBlock //{ // Text = senderShape.Label + ", " + (SecondaryAxis.LabelFormatter == null // ? senderShape.Value.Y.ToString(CultureInfo.InvariantCulture) // : SecondaryAxis.LabelFormatter(senderShape.Value.Y)), // Margin = new Thickness(5), // VerticalAlignment = VerticalAlignment.Center, // FontFamily = new FontFamily("Calibri"), // FontSize = 11, // Foreground = Brushes.White //}); //b.Child = sp; //Canvas.Children.Add(b); //var minDimension = DesiredSize.Width < DesiredSize.Height // ? DesiredSize.Width : DesiredSize.Height; //Canvas.SetLeft(b, (DesiredSize.Width-minDimension)/2 +10); //Canvas.SetTop(b, (DesiredSize.Height - minDimension) / 2 +10); var anim = new DoubleAnimation { To = 5, Duration = TimeSpan.FromMilliseconds(150) }; pieSlice.BeginAnimation(PieSlice.PushOutProperty, anim); //CurrentToolTip = b; }
public override void OnDataMouseEnter(object sender, MouseEventArgs e) { var b = new Border { BorderThickness = new Thickness(0), Background = new SolidColorBrush { Color = Color.FromRgb(30, 30, 30), Opacity = .8 }, CornerRadius = new CornerRadius(1) }; var sp = new StackPanel { Orientation = Orientation.Vertical }; var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender)); var pieSlice = senderShape?.Shape as PieSlice; if (pieSlice == null) { return; } pieSlice.Opacity = .8; sp.Children.Add(new TextBlock { Text = senderShape.Label + ", " + (SecondaryAxis.LabelFormatter == null ? senderShape.Value.Y.ToString(CultureInfo.InvariantCulture) : SecondaryAxis.LabelFormatter(senderShape.Value.Y)), Margin = new Thickness(5), VerticalAlignment = VerticalAlignment.Center, FontFamily = new FontFamily("Calibri"), FontSize = 11, Foreground = Brushes.White }); b.Child = sp; Canvas.Children.Add(b); var minDimension = DesiredSize.Width < DesiredSize.Height ? DesiredSize.Width : DesiredSize.Height; Canvas.SetLeft(b, (DesiredSize.Width - minDimension) / 2 + 10); Canvas.SetTop(b, (DesiredSize.Height - minDimension) / 2 + 10); var anim = new DoubleAnimation { To = 5, Duration = TimeSpan.FromMilliseconds(150) }; pieSlice.BeginAnimation(PieSlice.PushOutProperty, anim); CurrentToolTip = b; }
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) }); }
public override void DataMouseLeave(object sender, MouseEventArgs e) { base.DataMouseLeave(sender, e); var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender)); var pieSlice = senderShape != null ? senderShape.Shape as PieSlice : null; if (pieSlice == null) { return; } pieSlice.Opacity = 1; var anim = new DoubleAnimation { To = 0, Duration = TimeSpan.FromMilliseconds(150) }; pieSlice.BeginAnimation(PieSlice.PushOutProperty, anim); }
public virtual void DataMouseLeave(object sender, MouseEventArgs e) { var s = sender as Shape; if (s == null) { return; } var shape = HoverableShapes.FirstOrDefault(x => Equals(x.Shape, s)); if (shape == null) { return; } var sibilings = HoverableShapes .Where(x => Math.Abs(x.Value.X - shape.Value.X) < .001 * S.X).ToList(); foreach (var p in sibilings) { if (ShapeHoverBehavior == ShapeHoverBehavior.Dot) { p.Target.Fill = p.Series.Stroke; p.Target.Stroke = new SolidColorBrush { Color = PointHoverColor }; } else { p.Target.Opacity = 1; } } TooltipTimer.Stop(); TooltipTimer.Start(); }
public override void DataMouseLeave(object sender, MouseEventArgs e) { var s = sender as Shape; if (s == null) { return; } var shape = HoverableShapes.FirstOrDefault(x => Equals(x.Shape, s)); if (shape == null) { return; } shape.Target.Fill = shape.Series.Stroke; shape.Target.Stroke = new SolidColorBrush { Color = PointHoverColor }; TooltipTimer.Stop(); TooltipTimer.Start(); }
internal 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; } var pieSlice = senderShape.Shape as PieSlice; if (pieSlice == null) { return; } var labels = AxisX.Labels != null?AxisX.Labels.ToArray() : null; senderShape.Target.Opacity = .8; var vx = senderShape.Value.X; var indexedToolTip = DataTooltip as IndexedTooltip; if (indexedToolTip != null) { indexedToolTip.Header = labels == null ? (AxisX.LabelFormatter == null ? vx.ToString(CultureInfo.InvariantCulture) : AxisX.LabelFormatter(vx)) : (labels.Length > vx ? labels[(int)vx] : ""); indexedToolTip.Data = new[] { new IndexedTooltipData { Index = (int)vx, Stroke = senderShape.Shape.Stroke, Fill = senderShape.Shape.Fill, Series = senderShape.Series, Point = senderShape.Value, Value = AxisY.LabelFormatter == null ? senderShape.Value.Y.ToString(CultureInfo.InvariantCulture) : AxisY.LabelFormatter(senderShape.Value.Y) } }; } var alpha = pieSlice.RotationAngle + pieSlice.WedgeAngle * .5 + 180; var alphaRad = alpha * Math.PI / 180; var sliceMidAngle = alpha - 180; DataTooltip.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var y = Canvas.ActualHeight * .5 + (sliceMidAngle > 90 && sliceMidAngle < 270 ? -1 : 0) * DataTooltip.DesiredSize.Height - Math.Cos(alphaRad) * 15; var x = Canvas.ActualWidth * .5 + (sliceMidAngle > 0 && sliceMidAngle < 180 ? -1 : 0) * DataTooltip.DesiredSize.Width + Math.Sin(alphaRad) * 15; var p = new Point(x, y); 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) }); pieSlice.Opacity = .8; var anim = new DoubleAnimation { To = 5, Duration = TimeSpan.FromMilliseconds(150) }; pieSlice.BeginAnimation(PieSlice.PushOutProperty, anim); }
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) }); }
public override void OnDataMouseEnter(object sender, MouseEventArgs e) { var b = new Border { BorderThickness = TooltipBorderThickness ?? new Thickness(0), Background = TooltipBackground ?? new SolidColorBrush { Color = Color.FromRgb(30, 30, 30), Opacity = .8 }, CornerRadius = TooltipCornerRadius ?? new CornerRadius(1), BorderBrush = TooltipBorderBrush ?? Brushes.Transparent }; var sp = new StackPanel { Orientation = Orientation.Vertical }; var senderShape = HoverableShapes.FirstOrDefault(s => Equals(s.Shape, sender)); if (senderShape == null) { return; } senderShape.Target.Stroke = new SolidColorBrush { Color = senderShape.Serie.Color }; senderShape.Target.Fill = new SolidColorBrush { Color = PointHoverColor }; sp.Children.Add(new TextBlock { Text = "X:" + (PrimaryAxis.LabelFormatter == null ? senderShape.Value.X.ToString(CultureInfo.InvariantCulture) : PrimaryAxis.LabelFormatter(senderShape.Value.X)) + " Y: " + (SecondaryAxis.LabelFormatter == null ? senderShape.Value.Y.ToString(CultureInfo.InvariantCulture) : SecondaryAxis.LabelFormatter(senderShape.Value.Y)), Margin = new Thickness(5), VerticalAlignment = VerticalAlignment.Center, FontFamily = new FontFamily("Calibri"), FontSize = 11, Foreground = TooltipForegroung ?? Brushes.White }); b.Child = sp; Canvas.Children.Add(b); b.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); var x = senderShape.Value.X > (Min.X + Max.X) / 2 ? ToPlotArea(senderShape.Value.X, AxisTags.X) - 10 - b.DesiredSize.Width : ToPlotArea(senderShape.Value.X, AxisTags.X) + 10; var y = senderShape.Value.Y > (Min.Y + Max.Y) / 2 ? ToPlotArea(senderShape.Value.Y, AxisTags.Y) + 10 : ToPlotArea(senderShape.Value.Y, AxisTags.Y) - 10 - b.DesiredSize.Height; Canvas.SetLeft(b, x); Canvas.SetTop(b, y); Panel.SetZIndex(b, int.MaxValue - 1); CurrentToolTip = b; }