From a034f7a9a00e1bc494f587e1e4ea6ffc53111eb3 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sun, 7 Sep 2025 01:16:27 +0800 Subject: [PATCH] =?UTF-8?q?improve:=E5=A2=A8=E8=BF=B9=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow_cs/MW_SelectionGestures.cs | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index 9fb2598e..c648ba05 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -262,13 +262,31 @@ namespace Ink_Canvas { isGridInkCanvasSelectionCoverMouseDown = true; - // 立即开始墨迹拖动 + // 检查是否有选中的墨迹 if (inkCanvas.GetSelectedStrokes().Count > 0) { - isStrokeDragging = true; - strokeDragStartPoint = e.GetPosition(inkCanvas); - GridInkCanvasSelectionCover.CaptureMouse(); - GridInkCanvasSelectionCover.Cursor = Cursors.SizeAll; + // 获取鼠标点击位置 + var clickPoint = e.GetPosition(inkCanvas); + var selectionBounds = inkCanvas.GetSelectionBounds(); + + // 检查点击位置是否在选择框边界内 + if (clickPoint.X >= selectionBounds.Left && + clickPoint.X <= selectionBounds.Right && + clickPoint.Y >= selectionBounds.Top && + clickPoint.Y <= selectionBounds.Bottom) + { + // 只有在选择框边界内才允许拖动 + isStrokeDragging = true; + strokeDragStartPoint = clickPoint; + GridInkCanvasSelectionCover.CaptureMouse(); + GridInkCanvasSelectionCover.Cursor = Cursors.SizeAll; + } + else + { + // 点击在选择框外,取消选择 + inkCanvas.Select(new StrokeCollection()); + GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; + } } } @@ -516,6 +534,31 @@ namespace Ink_Canvas centerPoint = touchPoint.Position; lastTouchPointOnGridInkCanvasCover = touchPoint.Position; + // 检查是否有选中的墨迹 + if (inkCanvas.GetSelectedStrokes().Count > 0) + { + // 获取触摸点位置 + var touchPosition = e.GetTouchPoint(inkCanvas).Position; + var selectionBounds = inkCanvas.GetSelectionBounds(); + + // 检查触摸位置是否在选择框边界内 + if (touchPosition.X >= selectionBounds.Left && + touchPosition.X <= selectionBounds.Right && + touchPosition.Y >= selectionBounds.Top && + touchPosition.Y <= selectionBounds.Bottom) + { + // 只有在选择框边界内才允许拖动 + // 这里可以添加触摸拖动的逻辑 + } + else + { + // 触摸在选择框外,取消选择 + inkCanvas.Select(new StrokeCollection()); + GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; + return; + } + } + if (isStrokeSelectionCloneOn) { var strokes = inkCanvas.GetSelectedStrokes();