diff --git a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs index 934c7e25..07b8d8bc 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs @@ -191,9 +191,12 @@ namespace Ink_Canvas RefreshBlackBoardSidePageListView(); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderLeftPageListView); await Task.Delay(1); - ScrollViewToVerticalTop( - (ListViewItem)BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex( - CurrentWhiteboardIndex - 1), BlackBoardLeftSidePageListScrollViewer); + var leftContainer = BlackBoardLeftSidePageListView.ItemContainerGenerator.ContainerFromIndex( + CurrentWhiteboardIndex - 1) as ListViewItem; + if (leftContainer != null) + { + ScrollViewToVerticalTop(leftContainer, BlackBoardLeftSidePageListScrollViewer); + } } } else if (sender == BtnRightPageListWB) @@ -208,9 +211,12 @@ namespace Ink_Canvas RefreshBlackBoardSidePageListView(); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderRightPageListView); await Task.Delay(1); - ScrollViewToVerticalTop( - (ListViewItem)BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex( - CurrentWhiteboardIndex - 1), BlackBoardRightSidePageListScrollViewer); + var rightContainer = BlackBoardRightSidePageListView.ItemContainerGenerator.ContainerFromIndex( + CurrentWhiteboardIndex - 1) as ListViewItem; + if (rightContainer != null) + { + ScrollViewToVerticalTop(rightContainer, BlackBoardRightSidePageListScrollViewer); + } } } diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 2c0c8c30..44495fc7 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -2134,6 +2134,11 @@ namespace Ink_Canvas SaveStrokes(); } + if (!isAlreadyEraser) + { + ResetTouchStates(); + } + // 启用新的高级橡皮擦系统 EnableAdvancedEraserSystem(); @@ -2732,6 +2737,61 @@ namespace Ink_Canvas if (isSingleFingerDragMode) BtnFingerDragMode_Click(BtnFingerDragMode, null); isLongPressSelected = false; + + ResetTouchStates(); + } + + /// + /// 重置所有触摸相关状态, + /// + private void ResetTouchStates() + { + try + { + // 清空触摸点计数器 + dec.Clear(); + + // 重置多指触摸模式状态 + if (isInMultiTouchMode) + { + isInMultiTouchMode = false; + } + + // 重置单指拖动模式状态 + if (isSingleFingerDragMode) + { + isSingleFingerDragMode = false; + if (BtnFingerDragMode != null) + { + BtnFingerDragMode.Content = "单指\n拖动"; + } + } + + // 重置手掌擦状态 + if (isPalmEraserActive) + { + isPalmEraserActive = false; + palmEraserTouchDownHandled = false; + palmEraserTouchIds.Clear(); + StopPalmEraserRecoveryTimer(); + } + + // 确保触摸事件能正常响应 + 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) diff --git a/Ink Canvas/MainWindow_cs/MW_PageListView.cs b/Ink Canvas/MainWindow_cs/MW_PageListView.cs index 27d0e8e7..395d0058 100644 --- a/Ink Canvas/MainWindow_cs/MW_PageListView.cs +++ b/Ink Canvas/MainWindow_cs/MW_PageListView.cs @@ -68,9 +68,20 @@ namespace Ink_Canvas public static void ScrollViewToVerticalTop(FrameworkElement element, ScrollViewer scrollViewer) { + if (element == null || scrollViewer == null) + { + return; + } + var scrollViewerOffset = scrollViewer.VerticalOffset; var point = new Point(0, scrollViewerOffset); - var tarPos = element.TransformToVisual(scrollViewer).Transform(point); + var transform = element.TransformToVisual(scrollViewer); + if (transform == null) + { + return; + } + + var tarPos = transform.Transform(point); scrollViewer.ScrollToVerticalOffset(tarPos.Y); } diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 33834fdc..d33e4db6 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -968,6 +968,12 @@ namespace Ink_Canvas // 修复:允许单指拖动选中的墨迹,即使禁用了多指手势 if (isInMultiTouchMode) return; + + if (dec.Count == 0 && (isSingleFingerDragMode || isInMultiTouchMode)) + { + ResetTouchStates(); + return; + } // 如果是单指拖动选中的墨迹,允许处理 if (dec.Count == 1 && inkCanvas.GetSelectedStrokes().Count > 0)