Zooming To Mouse Point With ScrollView and ViewBox in Wpf

后端 未结 1 490
谎友^
谎友^ 2020-12-10 20:40

I have some paths drawn to the screen in wpf. The coordinates being used are quite small so they have been made to fill the screen with a view box. I am now trying to implem

相关标签:
1条回答
  • 2020-12-10 21:13

    Solved it changed the back code for zooming the View to:

    if (e.Delta > 0)
            {
                if (CustomDrawingElement != null)
                {
                    //zoom
    
                    _zoomScale++; //increase it now that we have zoomed
                    VisualisationBox.Width = _originalDimensions.X * (_zoomScale);
                    VisualisationBox.Height = _originalDimensions.Y * (_zoomScale);
    
                    ScrollerDimensions.Content = VisualisationScroller.ActualWidth + "x" + VisualisationScroller.ActualHeight;
                    BoxDimensions.Content = VisualisationBox.ActualWidth + "x" + VisualisationBox.ActualHeight;
    
                    var mousePosition = e.GetPosition(MasterGrid);
                    mousePosition = MasterGrid.TransformToVisual(VisualisationBox).Transform(mousePosition);
    
                    ScrolledPoint.Content = mousePosition.X + "," + mousePosition.Y;
                    VisualisationScroller.ScrollToHorizontalOffset(mousePosition.X);
                    VisualisationScroller.ScrollToVerticalOffset(mousePosition.Y);
    
                }
            }
            if (e.Delta < 0)
            {
                if (_zoomScale > 1) //stops you from zooming out too much
                {
                    if (CustomDrawingElement != null)
                    {
                        var mousePosition = e.GetPosition(MasterGrid);
    
                        _zoomScale -= 1; //decrease the zoom
                        VisualisationBox.Width = VisualisationBox.Width - _originalDimensions.X;
                        VisualisationBox.Height = VisualisationBox.Height - _originalDimensions.Y;
                        mousePosition = MasterGrid.TransformToVisual(VisualisationBox).Transform(mousePosition);
                        mousePosition = new Point(mousePosition.X - _originalDimensions.X, mousePosition.Y - _originalDimensions.Y);
    
                        VisualisationScroller.ScrollToHorizontalOffset(mousePosition.X);
                        VisualisationScroller.ScrollToVerticalOffset(mousePosition.Y);
                    }
                }
            }
    
            e.Handled = true;
    

    If anyone is interested HERE is the finished solution file with panning implemented too.

    0 讨论(0)
提交回复
热议问题