public override IChartPointView GetPointView(IChartPointView view, ChartPoint point, string label) { var pbv = (view as OhlcPointView); if (pbv == null) { pbv = new OhlcPointView { IsNew = true, HighToLowLine = new Line(), OpenLine = new Line(), CloseLine = new Line() }; BindingOperations.SetBinding(pbv.HighToLowLine, Shape.StrokeThicknessProperty, new Binding { Path = new PropertyPath(StrokeThicknessProperty), Source = this }); BindingOperations.SetBinding(pbv.CloseLine, Shape.StrokeThicknessProperty, new Binding { Path = new PropertyPath(StrokeThicknessProperty), Source = this }); BindingOperations.SetBinding(pbv.OpenLine, Shape.StrokeThicknessProperty, new Binding { Path = new PropertyPath(StrokeThicknessProperty), Source = this }); BindingOperations.SetBinding(pbv.HighToLowLine, Shape.StrokeDashArrayProperty, new Binding { Path = new PropertyPath(StrokeDashArrayProperty), Source = this }); BindingOperations.SetBinding(pbv.CloseLine, Shape.StrokeDashArrayProperty, new Binding { Path = new PropertyPath(StrokeDashArrayProperty), Source = this }); BindingOperations.SetBinding(pbv.OpenLine, Shape.StrokeDashArrayProperty, new Binding { Path = new PropertyPath(StrokeDashArrayProperty), Source = this }); BindingOperations.SetBinding(pbv.HighToLowLine, Panel.ZIndexProperty, new Binding { Path = new PropertyPath(Panel.ZIndexProperty), Source = this }); BindingOperations.SetBinding(pbv.CloseLine, Panel.ZIndexProperty, new Binding { Path = new PropertyPath(Panel.ZIndexProperty), Source = this }); BindingOperations.SetBinding(pbv.OpenLine, Panel.ZIndexProperty, new Binding { Path = new PropertyPath(Panel.ZIndexProperty), Source = this }); BindingOperations.SetBinding(pbv.HighToLowLine, VisibilityProperty, new Binding { Path = new PropertyPath(VisibilityProperty), Source = this }); BindingOperations.SetBinding(pbv.CloseLine, VisibilityProperty, new Binding { Path = new PropertyPath(VisibilityProperty), Source = this }); BindingOperations.SetBinding(pbv.OpenLine, VisibilityProperty, new Binding { Path = new PropertyPath(VisibilityProperty), Source = this }); Model.Chart.View.AddToDrawMargin(pbv.HighToLowLine); Model.Chart.View.AddToDrawMargin(pbv.OpenLine); Model.Chart.View.AddToDrawMargin(pbv.CloseLine); } else { pbv.IsNew = false; point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.HighToLowLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.OpenLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.CloseLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.HoverShape); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.DataLabel); } if (Model.Chart.RequiresHoverShape && pbv.HoverShape == null) { pbv.HoverShape = new Rectangle { Fill = Brushes.Transparent, StrokeThickness = 0 }; Panel.SetZIndex(pbv.HoverShape, int.MaxValue); BindingOperations.SetBinding(pbv.HoverShape, VisibilityProperty, new Binding { Path = new PropertyPath(VisibilityProperty), Source = this }); var wpfChart = (Chart)Model.Chart.View; wpfChart.AttachHoverableEventTo(pbv.HoverShape); Model.Chart.View.AddToDrawMargin(pbv.HoverShape); } if (DataLabels && pbv.DataLabel == null) { pbv.DataLabel = BindATextBlock(0); Panel.SetZIndex(pbv.DataLabel, int.MaxValue - 1); Model.Chart.View.AddToDrawMargin(pbv.DataLabel); } if (pbv.DataLabel != null) { pbv.DataLabel.Text = label; } if (point.Open < point.Close) { BindingOperations.SetBinding(pbv.HighToLowLine, Shape.StrokeProperty, new Binding { Path = new PropertyPath(IncreaseBrushProperty), Source = this }); BindingOperations.SetBinding(pbv.CloseLine, Shape.StrokeProperty, new Binding { Path = new PropertyPath(IncreaseBrushProperty), Source = this }); BindingOperations.SetBinding(pbv.OpenLine, Shape.StrokeProperty, new Binding { Path = new PropertyPath(IncreaseBrushProperty), Source = this }); } else { BindingOperations.SetBinding(pbv.HighToLowLine, Shape.StrokeProperty, new Binding { Path = new PropertyPath(DecreaseBrushProperty), Source = this }); BindingOperations.SetBinding(pbv.CloseLine, Shape.StrokeProperty, new Binding { Path = new PropertyPath(DecreaseBrushProperty), Source = this }); BindingOperations.SetBinding(pbv.OpenLine, Shape.StrokeProperty, new Binding { Path = new PropertyPath(DecreaseBrushProperty), Source = this }); } return(pbv); }
/// <summary> /// Gets the point view. /// </summary> /// <param name="point">The point.</param> /// <param name="label">The label.</param> /// <returns></returns> public override IChartPointView GetPointView(ChartPoint point, string label) { var pbv = (OhlcPointView)point.View; if (pbv == null) { pbv = new OhlcPointView { IsNew = true, HighToLowLine = new Line(), OpenLine = new Line(), CloseLine = new Line() }; Model.Chart.View.AddToDrawMargin(pbv.HighToLowLine); Model.Chart.View.AddToDrawMargin(pbv.OpenLine); Model.Chart.View.AddToDrawMargin(pbv.CloseLine); } else { pbv.IsNew = false; point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.HighToLowLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.OpenLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.CloseLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.HoverShape); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.DataLabel); } pbv.HighToLowLine.StrokeThickness = StrokeThickness; pbv.CloseLine.StrokeThickness = StrokeThickness; pbv.OpenLine.StrokeThickness = StrokeThickness; pbv.HighToLowLine.StrokeDashArray = StrokeDashArray; pbv.CloseLine.StrokeDashArray = StrokeDashArray; pbv.OpenLine.StrokeDashArray = StrokeDashArray; pbv.HighToLowLine.Visibility = Visibility; pbv.CloseLine.Visibility = Visibility; pbv.OpenLine.Visibility = Visibility; var i = Panel.GetZIndex(this); Panel.SetZIndex(pbv.HighToLowLine, i); Panel.SetZIndex(pbv.CloseLine, i); Panel.SetZIndex(pbv.OpenLine, i); if (Model.Chart.RequiresHoverShape && pbv.HoverShape == null) { pbv.HoverShape = new Rectangle { Fill = Brushes.Transparent, StrokeThickness = 0 }; Panel.SetZIndex(pbv.HoverShape, int.MaxValue); var wpfChart = (Chart)Model.Chart.View; wpfChart.AttachHoverableEventTo(pbv.HoverShape); Model.Chart.View.AddToDrawMargin(pbv.HoverShape); } if (pbv.HoverShape != null) { pbv.HoverShape.Visibility = Visibility; } if (DataLabels) { pbv.DataLabel = UpdateLabelContent(new DataLabelViewModel { FormattedText = label, Point = point }, pbv.DataLabel); } if (!DataLabels && pbv.DataLabel != null) { Model.Chart.View.RemoveFromDrawMargin(pbv.DataLabel); pbv.DataLabel = null; } if (point.Open < point.Close) { pbv.HighToLowLine.Stroke = IncreaseBrush; pbv.CloseLine.Stroke = IncreaseBrush; pbv.OpenLine.Stroke = IncreaseBrush; } else { pbv.HighToLowLine.Stroke = DecreaseBrush; pbv.CloseLine.Stroke = DecreaseBrush; pbv.OpenLine.Stroke = DecreaseBrush; } return(pbv); }
/// <summary> /// Gets the view of a given point /// </summary> /// <param name="point"></param> /// <param name="label"></param> /// <returns></returns> public override IChartPointView GetPointView(ChartPoint point, string label) { var pbv = (OhlcPointView)point.View; if (pbv == null) { pbv = new OhlcPointView { IsNew = true, HighToLowLine = new Line(), OpenLine = new Line(), CloseLine = new Line() }; Model.Chart.View.AddToDrawMargin(pbv.HighToLowLine); Model.Chart.View.AddToDrawMargin(pbv.OpenLine); Model.Chart.View.AddToDrawMargin(pbv.CloseLine); } else { pbv.IsNew = false; point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.HighToLowLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.OpenLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.CloseLine); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.HoverShape); point.SeriesView.Model.Chart.View .EnsureElementBelongsToCurrentDrawMargin(pbv.DataLabel); } pbv.HighToLowLine.StrokeThickness = StrokeThickness; pbv.CloseLine.StrokeThickness = StrokeThickness; pbv.OpenLine.StrokeThickness = StrokeThickness; pbv.HighToLowLine.StrokeDashArray = StrokeDashArray; pbv.CloseLine.StrokeDashArray = StrokeDashArray; pbv.OpenLine.StrokeDashArray = StrokeDashArray; pbv.HighToLowLine.Visibility = Visibility; pbv.CloseLine.Visibility = Visibility; pbv.OpenLine.Visibility = Visibility; var i = Canvas.GetZIndex(this); Canvas.SetZIndex(pbv.HighToLowLine, i); Canvas.SetZIndex(pbv.CloseLine, i); Canvas.SetZIndex(pbv.OpenLine, i); if (Model.Chart.RequiresHoverShape && pbv.HoverShape == null) { pbv.HoverShape = new Rectangle { Fill = new SolidColorBrush(Colors.Transparent), StrokeThickness = 0 }; Canvas.SetZIndex(pbv.HoverShape, short.MaxValue); var uwpfChart = (Chart)Model.Chart.View; uwpfChart.AttachHoverableEventTo(pbv.HoverShape); Model.Chart.View.AddToDrawMargin(pbv.HoverShape); } if (pbv.HoverShape != null) { pbv.HoverShape.Visibility = Visibility; } if (DataLabels && pbv.DataLabel == null) { pbv.DataLabel = BindATextBlock(0); Canvas.SetZIndex(pbv.DataLabel, short.MaxValue - 1); Model.Chart.View.AddToDrawMargin(pbv.DataLabel); } if (pbv.DataLabel != null) { pbv.DataLabel.Text = label; } if (point.Open < point.Close) { pbv.HighToLowLine.Stroke = IncreaseBrush; pbv.CloseLine.Stroke = IncreaseBrush; pbv.OpenLine.Stroke = IncreaseBrush; } else { pbv.HighToLowLine.Stroke = DecreaseBrush; pbv.CloseLine.Stroke = DecreaseBrush; pbv.OpenLine.Stroke = DecreaseBrush; } return(pbv); }