再次优化了画布的移动

This commit is contained in:
fengjiayi
2024-09-07 16:14:59 +08:00
parent ae1a00ee2a
commit f1a4f9efce

View File

@@ -19,6 +19,7 @@ using System.Windows.Media;
using System.Windows.Media.Animation; using System.Windows.Media.Animation;
using System.Windows.Media.Media3D; using System.Windows.Media.Media3D;
using System.Windows.Shapes; using System.Windows.Shapes;
using System.Xml.Linq;
using DataObject = System.Windows.DataObject; using DataObject = System.Windows.DataObject;
namespace Serein.WorkBench namespace Serein.WorkBench
@@ -202,8 +203,11 @@ namespace Serein.WorkBench
private bool IsDragging; private bool IsDragging;
private bool IsCanvasDragging; private bool IsCanvasDragging;
private Point startMousePosition; 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); var logTextWriter = new LogTextWriter(WriteLog);
Console.SetOut(logTextWriter); Console.SetOut(logTextWriter);
transform = new TranslateTransform(); //transform = new TranslateTransform();
FlowChartCanvas.RenderTransform = transform; //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) 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)) if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ {
double scale = e.Delta > 0 ? 1.1 : 0.9; double scale = e.Delta > 0 ? 1.1 : 0.9;
scaleTransform.ScaleX *= scale;
foreach (UIElement element in FlowChartCanvas.Children) scaleTransform.ScaleY *= scale;
{
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();
}
} }
} }
private void AdjustCanvasSizeAndContent(double deltaX, double deltaY) private void AdjustCanvasSizeAndContent(double deltaX, double deltaY)
@@ -1339,7 +1337,7 @@ namespace Serein.WorkBench
{ {
double offsetX = transformedBounds.Left; double offsetX = transformedBounds.Left;
myCanvas.Width += offsetX; myCanvas.Width += offsetX;
transform.X -= offsetX; translateTransform.X -= offsetX;
// 移动所有控件的位置 // 移动所有控件的位置
foreach (UIElement child in myCanvas.Children) foreach (UIElement child in myCanvas.Children)
@@ -1353,7 +1351,7 @@ namespace Serein.WorkBench
{ {
double offsetY = transformedBounds.Top; double offsetY = transformedBounds.Top;
myCanvas.Height += offsetY; myCanvas.Height += offsetY;
transform.Y -= offsetY; translateTransform.Y -= offsetY;
// 移动所有控件的位置 // 移动所有控件的位置
foreach (UIElement child in myCanvas.Children) foreach (UIElement child in myCanvas.Children)
@@ -1408,13 +1406,12 @@ namespace Serein.WorkBench
double deltaX = currentMousePosition.X - startMousePosition.X; double deltaX = currentMousePosition.X - startMousePosition.X;
double deltaY = currentMousePosition.Y - startMousePosition.Y; double deltaY = currentMousePosition.Y - startMousePosition.Y;
transform.X += deltaX; translateTransform.X += deltaX;
transform.Y += deltaY; translateTransform.Y += deltaY;
startMousePosition = currentMousePosition; startMousePosition = currentMousePosition;
// 调整画布大小和控件位置 // Adjust canvas size and content if necessary
AdjustCanvasSizeAndContent(deltaX, deltaY); AdjustCanvasSizeAndContent(deltaX, deltaY);
} }
} }