From 2d7eff820531a38599a6493bb9ca291f67eb3a06 Mon Sep 17 00:00:00 2001 From: unknown <2564608840@qq.com> Date: Fri, 18 Jul 2025 17:59:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=A7=A6=E6=91=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow_cs/MW_FloatingBarIcons.cs | 3 ++ .../MainWindow_cs/MW_SelectionGestures.cs | 3 ++ Ink Canvas/MainWindow_cs/MW_TouchEvents.cs | 38 +++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 095a99a7..5c236158 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -1440,6 +1440,7 @@ namespace Ink_Canvas { } private void EraserIcon_Click(object sender, RoutedEventArgs e) { + EnterMultiTouchModeIfNeeded(); bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint; forceEraser = false; forcePointEraser = true; @@ -1464,6 +1465,7 @@ namespace Ink_Canvas { } private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) { + EnterMultiTouchModeIfNeeded(); bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint; forceEraser = false; forcePointEraser = true; @@ -1487,6 +1489,7 @@ namespace Ink_Canvas { } private void EraserIconByStrokes_Click(object sender, RoutedEventArgs e) { + EnterMultiTouchModeIfNeeded(); if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel) ((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent); diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index 134621c2..1f666345 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -244,6 +244,7 @@ namespace Ink_Canvas { } private void BtnSelect_Click(object sender, RoutedEventArgs e) { + ExitMultiTouchModeIfNeeded(); forceEraser = true; drawingShapeMode = 0; inkCanvas.IsManipulationEnabled = false; @@ -424,6 +425,7 @@ namespace Ink_Canvas { } private void LassoSelect_Click(object sender, RoutedEventArgs e) { + ExitMultiTouchModeIfNeeded(); forceEraser = false; forcePointEraser = false; isLastTouchEraser = false; @@ -433,6 +435,7 @@ namespace Ink_Canvas { } private void BtnLassoSelect_Click(object sender, RoutedEventArgs e) { + ExitMultiTouchModeIfNeeded(); forceEraser = false; forcePointEraser = false; isLastTouchEraser = false; diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index e15f3725..eba66daf 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -479,5 +479,43 @@ namespace Ink_Canvas { } } } + + // 退出多指书写模式,恢复InkCanvas的TouchDown事件绑定 + private void ExitMultiTouchModeIfNeeded() + { + if (isInMultiTouchMode) + { + inkCanvas.StylusDown -= MainWindow_StylusDown; + inkCanvas.StylusMove -= MainWindow_StylusMove; + inkCanvas.StylusUp -= MainWindow_StylusUp; + inkCanvas.TouchDown -= MainWindow_TouchDown; + inkCanvas.TouchDown += Main_Grid_TouchDown; + if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) + { + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + } + inkCanvas.Children.Clear(); + isInMultiTouchMode = false; + } + } + + // 进入多指书写模式,绑定Main_Grid_TouchDown + private void EnterMultiTouchModeIfNeeded() + { + if (!isInMultiTouchMode) + { + inkCanvas.StylusDown += MainWindow_StylusDown; + inkCanvas.StylusMove += MainWindow_StylusMove; + inkCanvas.StylusUp += MainWindow_StylusUp; + inkCanvas.TouchDown += MainWindow_TouchDown; + inkCanvas.TouchDown -= Main_Grid_TouchDown; + if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) + { + inkCanvas.EditingMode = InkCanvasEditingMode.None; + } + inkCanvas.Children.Clear(); + isInMultiTouchMode = true; + } + } } }