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; + } + } } }