From afb65eb908bd64af41fd6b44041067e0865868b0 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sun, 28 Dec 2025 10:01:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E5=A2=A8=E8=BF=B9?= =?UTF-8?q?=E9=80=89=E4=B8=AD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow_cs/MW_SelectionGestures.cs | 68 ++++--------------- Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 63 +---------------- 2 files changed, 17 insertions(+), 114 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index df0121e2..e0639030 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -627,36 +627,7 @@ namespace Ink_Canvas { var touchPoint = e.GetTouchPoint(null); centerPoint = touchPoint.Position; - lastTouchPointOnGridInkCanvasCover = e.GetTouchPoint(inkCanvas).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) - { - // 只有在选择框边界内才允许拖动 - // 触摸拖动状态已通过TouchMove事件处理 - } - else - { - // 触摸在选择框外,取消选择 - inkCanvas.Select(new StrokeCollection()); - GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - return; - } - } - - - SetCurrentToolMode(InkCanvasEditingMode.Select); - inkCanvas.Select(new StrokeCollection()); + lastTouchPointOnGridInkCanvasCover = touchPoint.Position; } } @@ -664,33 +635,25 @@ namespace Ink_Canvas { dec.Remove(e.TouchDevice.Id); if (dec.Count >= 1) return; - - // 重置触摸状态 - lastTouchPointOnGridInkCanvasCover = new Point(0, 0); isProgramChangeStrokeSelection = false; - - // 检查是否有点击(没有移动) - var currentTouchPoint = e.GetTouchPoint(null).Position; - if (Math.Abs(currentTouchPoint.X - centerPoint.X) < 5 && Math.Abs(currentTouchPoint.Y - centerPoint.Y) < 5) + + var touchUpPoint = e.GetTouchPoint(null).Position; + if (lastTouchPointOnGridInkCanvasCover == touchUpPoint) { - // 点击在选择框内,保持选择状态 - if (inkCanvas.GetSelectedStrokes().Count > 0) + var touchPointInCanvas = e.GetTouchPoint(inkCanvas).Position; + var selectionBounds = inkCanvas.GetSelectionBounds(); + + if (!(touchPointInCanvas.X < selectionBounds.Left) && + !(touchPointInCanvas.Y < selectionBounds.Top) && + !(touchPointInCanvas.X > selectionBounds.Right) && + !(touchPointInCanvas.Y > selectionBounds.Bottom)) { - var selectionBounds = inkCanvas.GetSelectionBounds(); - if (currentTouchPoint.X >= selectionBounds.Left && - currentTouchPoint.X <= selectionBounds.Right && - currentTouchPoint.Y >= selectionBounds.Top && - currentTouchPoint.Y <= selectionBounds.Bottom) - { - // 点击在选择框内,保持选择 - GridInkCanvasSelectionCover.Visibility = Visibility.Visible; - StrokesSelectionClone = new StrokeCollection(); - return; - } + return; } - - // 点击在选择框外,取消选择 + isProgramChangeStrokeSelection = true; inkCanvas.Select(new StrokeCollection()); + GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; + isProgramChangeStrokeSelection = false; StrokesSelectionClone = new StrokeCollection(); } else if (inkCanvas.GetSelectedStrokes().Count == 0) @@ -703,7 +666,6 @@ namespace Ink_Canvas GridInkCanvasSelectionCover.Visibility = Visibility.Visible; StrokesSelectionClone = new StrokeCollection(); } - } private void LassoSelect_Click(object sender, RoutedEventArgs e) diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 51f27c3d..13e40318 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -224,29 +224,8 @@ namespace Ink_Canvas } if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint - || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke) return; - - // 处理选择模式下的触摸事件:检查是否有选中的墨迹,如果有,检查触摸点是否在选中区域外 - if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) - { - 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) - { - // 触摸在选择框外,取消选择 - inkCanvas.Select(new StrokeCollection()); - GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - } - } - return; - } + || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke + || inkCanvas.EditingMode == InkCanvasEditingMode.Select) return; if (!isHidingSubPanelsWhenInking) { @@ -562,26 +541,6 @@ namespace Ink_Canvas } if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) { - dec.Add(e.TouchDevice.Id); - - // 检查是否有选中的墨迹,如果有,检查触摸点是否在选中区域外 - if (dec.Count == 1 && 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) - { - // 触摸在选择框外,取消选择 - inkCanvas.Select(new StrokeCollection()); - GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - } - } - return; } if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) @@ -622,24 +581,6 @@ namespace Ink_Canvas var touchPoint = e.GetTouchPoint(inkCanvas); centerPoint = touchPoint.Position; - // 检查是否有选中的墨迹,如果有,检查触摸点是否在选中区域外 - if (inkCanvas.GetSelectedStrokes().Count > 0) - { - var touchPosition = touchPoint.Position; - var selectionBounds = inkCanvas.GetSelectionBounds(); - - // 检查触摸位置是否在选择框边界外 - if (touchPosition.X < selectionBounds.Left || - touchPosition.X > selectionBounds.Right || - touchPosition.Y < selectionBounds.Top || - touchPosition.Y > selectionBounds.Bottom) - { - // 触摸在选择框外,取消选择 - inkCanvas.Select(new StrokeCollection()); - GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - } - } - //记录第一根手指点击时的 StrokeCollection lastTouchDownStrokeCollection = inkCanvas.Strokes.Clone(); }