From f1a4f9efceb1df3688d34d06b790c931df260a2f Mon Sep 17 00:00:00 2001 From: fengjiayi <12821976+ning_xi@user.noreply.gitee.com> Date: Sat, 7 Sep 2024 16:14:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=8D=E6=AC=A1=E4=BC=98=E5=8C=96=E4=BA=86?= =?UTF-8?q?=E7=94=BB=E5=B8=83=E7=9A=84=E7=A7=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WorkBench/MainWindow.xaml.cs | 51 +++++++++++++++++------------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/WorkBench/MainWindow.xaml.cs b/WorkBench/MainWindow.xaml.cs index 27b4bfd..1cbe542 100644 --- a/WorkBench/MainWindow.xaml.cs +++ b/WorkBench/MainWindow.xaml.cs @@ -19,6 +19,7 @@ using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Media3D; using System.Windows.Shapes; +using System.Xml.Linq; using DataObject = System.Windows.DataObject; namespace Serein.WorkBench @@ -202,8 +203,11 @@ namespace Serein.WorkBench private bool IsDragging; private bool IsCanvasDragging; private Point startMousePosition; - private TranslateTransform transform; + private TranslateTransform transform1; + private TransformGroup canvasTransformGroup; + private ScaleTransform scaleTransform; + private TranslateTransform translateTransform; @@ -218,8 +222,18 @@ namespace Serein.WorkBench var logTextWriter = new LogTextWriter(WriteLog); Console.SetOut(logTextWriter); - transform = new TranslateTransform(); - FlowChartCanvas.RenderTransform = transform; + //transform = new TranslateTransform(); + //FlowChartCanvas.RenderTransform = transform; + + canvasTransformGroup = new TransformGroup(); + scaleTransform = new ScaleTransform(); + translateTransform = new TranslateTransform(); + + canvasTransformGroup.Children.Add(scaleTransform); + canvasTransformGroup.Children.Add(translateTransform); + + FlowChartCanvas.RenderTransform = canvasTransformGroup; + FlowChartCanvas.RenderTransformOrigin = new Point(0.5, 0.5); } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) @@ -1306,24 +1320,8 @@ namespace Serein.WorkBench if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) { double scale = e.Delta > 0 ? 1.1 : 0.9; - - foreach (UIElement element in FlowChartCanvas.Children) - { - element.RenderTransformOrigin = new Point(0.5, 0.5); - var transform = element.RenderTransform as ScaleTransform; - if (transform == null) - { - transform = new ScaleTransform(); - element.RenderTransform = transform; - } - transform.ScaleX *= scale; - transform.ScaleY *= scale; - } - - foreach (var line in connections) - { - line.Refresh(); - } + scaleTransform.ScaleX *= scale; + scaleTransform.ScaleY *= scale; } } private void AdjustCanvasSizeAndContent(double deltaX, double deltaY) @@ -1339,7 +1337,7 @@ namespace Serein.WorkBench { double offsetX = transformedBounds.Left; myCanvas.Width += offsetX; - transform.X -= offsetX; + translateTransform.X -= offsetX; // 移动所有控件的位置 foreach (UIElement child in myCanvas.Children) @@ -1353,7 +1351,7 @@ namespace Serein.WorkBench { double offsetY = transformedBounds.Top; myCanvas.Height += offsetY; - transform.Y -= offsetY; + translateTransform.Y -= offsetY; // 移动所有控件的位置 foreach (UIElement child in myCanvas.Children) @@ -1408,13 +1406,12 @@ namespace Serein.WorkBench double deltaX = currentMousePosition.X - startMousePosition.X; double deltaY = currentMousePosition.Y - startMousePosition.Y; - transform.X += deltaX; - transform.Y += deltaY; - + translateTransform.X += deltaX; + translateTransform.Y += deltaY; startMousePosition = currentMousePosition; - // 调整画布大小和控件位置 + // Adjust canvas size and content if necessary AdjustCanvasSizeAndContent(deltaX, deltaY); } }