From 3ef7434f5bef23c5c53db26ce2ff121e65936e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=89=BE=E7=AB=B9?= Date: Tue, 14 Feb 2023 22:15:19 +0800 Subject: [PATCH] =?UTF-8?q?ZoomBox=20=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml | 8 ++- .../Controls/ZoomBox.cs | 60 ++++++++++++++----- .../Styles/ZoomBox.xaml | 4 +- .../UserControls/DiagramControl.xaml.cs | 2 +- .../BaseViewModel/DiagramViewModel.cs | 28 +++++++++ .../ViewModels/IDiagramViewModel.cs | 8 +++ 6 files changed, 88 insertions(+), 22 deletions(-) diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index 435b29d..8940371 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -1900,7 +1900,9 @@ Width="180" HorizontalAlignment="Right" VerticalAlignment="Bottom" - ScrollViewer="{Binding ElementName=designerScrollViewer}" + DesignerCanvas="{Binding ElementName=diagram}" + MaximumZoomValue="{Binding MaximumZoomValue,Mode=TwoWay}" + MinimumZoomValue="{Binding MinimumZoomValue,Mode=TwoWay}" ZoomValue="{Binding ZoomValue,Mode=TwoWay}" Margin="0,0,5,5" /> @@ -2062,9 +2064,9 @@ (this.DesignerCanvas); if (this.ScrollViewer == null) return; - DesignerCanvas = VisualHelper.FindChild(this.ScrollViewer); - - diagramControl = VisualHelper.FindChild(this.ScrollViewer); - this.zoomThumb = Template.FindName("PART_ZoomThumb", this) as Thumb; if (this.zoomThumb == null) throw new Exception("PART_ZoomThumb template is missing!"); @@ -162,6 +184,12 @@ namespace AIStudio.Wpf.DiagramDesigner private void DesignerCanvas_MouseWheel(object sender, EventArgs e) { + if (Keyboard.IsKeyDown(Key.LeftCtrl) == false + && Keyboard.IsKeyDown(Key.RightCtrl) == false) + { + return; + } + MouseWheelEventArgs wheel = (MouseWheelEventArgs)e; //divide the value by 10 so that it is more smooth @@ -172,9 +200,9 @@ namespace AIStudio.Wpf.DiagramDesigner private void InvalidateScale(out double scale, out double xOffset, out double yOffset) { - Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(diagramControl); - double w = DesignerCanvas.ActualWidth * ZoomValue + vector.X * 2; - double h = DesignerCanvas.ActualHeight * ZoomValue + vector.Y * 2; + Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(DesignerCanvas); + double w = DesignerCanvas.ActualWidth + vector.X * 2; + double h = DesignerCanvas.ActualHeight + vector.Y * 2; // zoom canvas size double x = this.zoomCanvas.ActualWidth; diff --git a/AIStudio.Wpf.DiagramDesigner/Styles/ZoomBox.xaml b/AIStudio.Wpf.DiagramDesigner/Styles/ZoomBox.xaml index 8c87a02..58058f2 100644 --- a/AIStudio.Wpf.DiagramDesigner/Styles/ZoomBox.xaml +++ b/AIStudio.Wpf.DiagramDesigner/Styles/ZoomBox.xaml @@ -210,8 +210,8 @@ 0 ? 0.1 : -0.1); - DiagramViewModel.ZoomValue = Math.Max(Math.Min(newZoomValue, 10), 0.5); + DiagramViewModel.ZoomValue = Math.Max(Math.Min(newZoomValue, DiagramViewModel.MaximumZoomValue), DiagramViewModel.MinimumZoomValue); e.Handled = true; } diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 6aedb00..425656d 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -400,6 +400,34 @@ namespace AIStudio.Wpf.DiagramDesigner } } + private double _maximumZoomValue = 3; + [Browsable(false)] + public double MaximumZoomValue + { + get + { + return _maximumZoomValue; + } + set + { + SetProperty(ref _maximumZoomValue, value); + } + } + + private double _minimumZoomValue = 0.5; + [Browsable(false)] + public double MinimumZoomValue + { + get + { + return _minimumZoomValue; + } + set + { + SetProperty(ref _minimumZoomValue, value); + } + } + private double _delayZoomValue = 1; [Browsable(false)] public double DelayZoomValue diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs index 31b3c4b..1ef133f 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs @@ -257,6 +257,14 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } + double MaximumZoomValue + { + get; set; + } + double MinimumZoomValue + { + get; set; + } bool AllowDrop { get; set;