Exemple #1
0
        public Indicator(View Chart, bool Twin = false) : base(Chart)
        {
            this.Twin = Twin;

            Grid.SetColumn(ScaleGrd, 2);

            pixelsPerDip = VisualTreeHelper.GetDpi(ScaleVisual).PixelsPerDip;
            IndicatorCanvasBase.AddVisual(IndicatorVisualBase);
            GridCanvas.AddVisual(GridVisual);
            ScaleCanvas.AddVisual(ScaleVisual);

            BaseGrd.MouseEnter += (s, e) => Chart.Interaction = ShoWMenu;
            BaseGrd.MouseLeave += (s, e) => { if (Chart.Interaction == ShoWMenu)
                                              {
                                                  Chart.Interaction = null;
                                              }
            };
            BaseGrd.MouseEnter  += CursorShow;
            BaseGrd.MouseLeave  += CursorLeave;
            BaseGrd.MouseMove   += CursorRedraw;
            BaseGrd.MouseEnter  += (s, e) => Chart.SetMoving(s, e);
            BaseGrd.MouseLeave  += (s, e) => Chart.BreakMoving(s, e);
            BaseGrd.SizeChanged += BaseGrd_SizeChanged;

            BaseGrd.Children.Add(Selector);
            BaseGrd.Children.Add(GridCanvas);
            BaseGrd.ClipToBounds = true;
            BaseGrd.Background   = CursorGrabber;
            BaseGrd.Cursor       = Cursors.None;
            {
                var L2grd = new Grid();
                {
                    var L3grd = new Grid
                    {
                        RenderTransformOrigin = new Point(1, 0.5),
                        RenderTransform       = ScX
                    };
                    {
                        var L4grd = new Grid {
                            RenderTransformOrigin = new Point(0.5, 0.5)
                        };
                        {
                            var tgr = new TransformGroup();
                            {
                                tgr.Children.Add(new RotateTransform(180));
                                tgr.Children.Add(Translate);
                                tgr.Children.Add(ScY);
                            }
                            L4grd.RenderTransform = tgr;
                            L4grd.Children.Add(IndicatorCanvasBase);
                        }
                        L3grd.Children.Add(L4grd);
                    }
                    L2grd.Children.Add(L3grd);
                }
                BaseGrd.Children.Add(L2grd);
            }
            if (Twin)
            {
                IndicatorCanvasSecond = new DrawingCanvas();
                IndicatorVisualSecond = new DrawingVisual();
                IndicatorCanvasSecond.AddVisual(IndicatorVisualSecond);
                BaseGrd.Children.Add(IndicatorCanvasSecond);
            }
            BaseGrd.Children.Add(CursorLayer);

            ScaleGrd.ClipToBounds = true;
            ScaleGrd.Background   = CursorGrabber;
            ScaleGrd.Children.Add(ScaleCanvas);
            ScaleGrd.Children.Add(ValueMarkLayer);

            CursorLinesTransform        = (TranslateTransform)Chart.CursorLinesLayer.RenderTransform;
            CursorLayer.RenderTransform = CursorTransform;

            Chart.CandlesChanged     += ac => Redraw();
            Chart.AllHorizontalReset += HorizontalReset;
            Chart.NewXScale          += sc => Task.Run(() => Dispatcher.Invoke(() => ScaleX = sc));
            Chart.NewXTrans          += tr => Task.Run(() => Dispatcher.Invoke(() => Translate.X = tr));
            if (Twin)
            {
                Chart.AllHorizontalReset += ac => SecondReset();
                Chart.NewXScale          += sc => SecondReset();
                Chart.NewXTrans          += sc => SecondReset();
            }
            Chart.NewFSF += fsf => RedrawScale();
        }