Esempio n. 1
0
        private void ToolBox_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Label lb = sender as Label;

            switch (lb.Content)
            {
            case "Move":
                this.isMoveMode = !isMoveMode;
                break;

            case "Zoom in":
                if (Zoom <= 2)
                {
                    Zoom += .05;
                    scaleTransform.ScaleX = Zoom;
                    scaleTransform.ScaleY = Zoom;

                    var centerOfViewport = new Point(MainScrollViewer.ViewportWidth / 2, MainScrollViewer.ViewportHeight / 2);
                    lastCenterPositionOnTarget = MainScrollViewer.TranslatePoint(centerOfViewport, GridWorkspace);
                    if (!lbZoomOut.IsEnabled)
                    {
                        lbZoomOut.IsEnabled  = true;
                        lbZoomOut.Foreground = Brushes.White;
                    }
                }
                else
                {
                    lb.IsEnabled = false;
                }
                break;

            case "Zoom out":
                if (Zoom > 0.3)
                {
                    Zoom -= .05;
                    scaleTransform.ScaleX = Zoom;
                    scaleTransform.ScaleY = Zoom;

                    var centerOfViewport1 = new Point(MainScrollViewer.ViewportWidth / 2, MainScrollViewer.ViewportHeight / 2);
                    lastCenterPositionOnTarget = MainScrollViewer.TranslatePoint(centerOfViewport1, GridWorkspace);
                }
                else
                {
                    lb.IsEnabled = false;
                }
                break;
            }
            lbZoomRatio.Content = (Zoom * 100).ToString() + "%";
        }
Esempio n. 2
0
        void OnScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            if (e.ExtentHeightChange != 0 || e.ExtentWidthChange != 0)
            {
                Point?targetBefore = null;
                Point?targetNow    = null;

                if (!lastMousePositionOnTarget.HasValue)
                {
                    if (lastCenterPositionOnTarget.HasValue)
                    {
                        var   centerOfViewport  = new Point(MainScrollViewer.ViewportWidth / 2, MainScrollViewer.ViewportHeight / 2);
                        Point centerOfTargetNow = MainScrollViewer.TranslatePoint(centerOfViewport, MainCanvas);

                        targetBefore = lastCenterPositionOnTarget;
                        targetNow    = centerOfTargetNow;
                    }
                }
                else
                {
                    targetBefore = lastMousePositionOnTarget;
                    targetNow    = Mouse.GetPosition(MainCanvas);

                    lastMousePositionOnTarget = null;
                }

                if (targetBefore.HasValue)
                {
                    double dXInTargetPixels = targetNow.Value.X - targetBefore.Value.X;
                    double dYInTargetPixels = targetNow.Value.Y - targetBefore.Value.Y;

                    double multiplicatorX = e.ExtentWidth / MainCanvas.Width;
                    double multiplicatorY = e.ExtentHeight / MainCanvas.Height;

                    double newOffsetX = MainScrollViewer.HorizontalOffset - dXInTargetPixels * multiplicatorX;
                    double newOffsetY = MainScrollViewer.VerticalOffset - dYInTargetPixels * multiplicatorY;

                    if (double.IsNaN(newOffsetX) || double.IsNaN(newOffsetY))
                    {
                        return;
                    }

                    MainScrollViewer.ScrollToHorizontalOffset(newOffsetX);
                    MainScrollViewer.ScrollToVerticalOffset(newOffsetY);
                }
            }
        }