diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 0e98ca3a..86d0cd27 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -1408,6 +1408,8 @@ namespace Ink_Canvas { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } + + ResetTouchStates(); }); }).Start(); } @@ -2360,7 +2362,11 @@ namespace Ink_Canvas drawingShapeMode = 0; + // 这样从线擦切换回批注时,可以恢复之前的荧光笔状态 + // penType 和 drawingAttributes 的状态将在 PenIcon_Click 中根据 wasHighlighter 来恢复 + inkCanvas_EditingModeChanged(inkCanvas, null); + CancelSingleFingerDragMode(); HideSubPanels("eraserByStrokes"); @@ -2860,11 +2866,97 @@ namespace Ink_Canvas // 恢复非笔画元素 RestoreNonStrokeElements(preservedElements); + CancelSingleFingerDragMode(); + if (Settings.Canvas.ClearCanvasAndClearTimeMachine) timeMachine.ClearStrokeHistory(); + + if (Settings.Gesture.IsEnableMultiTouchMode && ToggleSwitchEnableMultiTouchMode != null && ToggleSwitchEnableMultiTouchMode.IsOn) + { + ReinitializeMultiTouchMode(); + } } private bool lastIsInMultiTouchMode; + private void ReinitializeMultiTouchMode() + { + try + { + if (!isInMultiTouchMode) + { + isInMultiTouchMode = true; + } + + inkCanvas.TouchDown -= Main_Grid_TouchDown; + inkCanvas.TouchDown += MainWindow_TouchDown; + inkCanvas.StylusDown += MainWindow_StylusDown; + inkCanvas.StylusMove += MainWindow_StylusMove; + inkCanvas.StylusUp += MainWindow_StylusUp; + + } + catch (Exception) + { + } + } + + private void CancelSingleFingerDragMode() + { + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(); + + GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; + + if (isSingleFingerDragMode) BtnFingerDragMode_Click(BtnFingerDragMode, null); + isLongPressSelected = false; + + ResetTouchStates(); + } + + /// + /// 重置所有触摸相关状态, + /// + private void ResetTouchStates() + { + try + { + // 清空触摸点计数器 + dec.Clear(); + + + // 重置单指拖动模式状态 + if (isSingleFingerDragMode) + { + isSingleFingerDragMode = false; + if (BtnFingerDragMode != null) + { + BtnFingerDragMode.Content = "单指\n拖动"; + } + } + + // 重置手掌擦状态 + if (isPalmEraserActive) + { + isPalmEraserActive = false; + } + + // 确保触摸事件能正常响应 + inkCanvas.IsHitTestVisible = true; + inkCanvas.IsManipulationEnabled = true; + + // 释放所有触摸捕获 + inkCanvas.ReleaseAllTouchCaptures(); + + // 恢复UI元素的触摸响应 + ViewboxFloatingBar.IsHitTestVisible = true; + BlackboardUIGridForInkReplay.IsHitTestVisible = true; + + + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"重置触摸状态失败: {ex.Message}", LogHelper.LogType.Error); + } + } + private void BtnHideControl_Click(object sender, RoutedEventArgs e) { if (StackPanelControl.Visibility == Visibility.Visible)