diff --git a/Ink Canvas/Helpers/InkFadeManager.cs b/Ink Canvas/Helpers/InkFadeManager.cs index a13d1ea6..23d74ef5 100644 --- a/Ink Canvas/Helpers/InkFadeManager.cs +++ b/Ink Canvas/Helpers/InkFadeManager.cs @@ -71,6 +71,11 @@ namespace Ink_Canvas.Helpers try { + // 确保主窗口的InkCanvas保持Ink编辑模式,防止墨迹渐隐时切换到鼠标模式 + if (_mainWindow.inkCanvas.EditingMode != InkCanvasEditingMode.Ink) + { + _mainWindow.inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + } // 记录墨迹的起点和终点 _strokeStartPoints[stroke] = startPoint; diff --git a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs index 65003790..c18c2388 100644 --- a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs +++ b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs @@ -9,6 +9,7 @@ using System.Windows.Controls; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; +using System.Windows.Threading; using Point = System.Windows.Point; namespace Ink_Canvas @@ -63,10 +64,10 @@ namespace Ink_Canvas var startPoint = e.Stroke.StylusPoints.Count > 0 ? e.Stroke.StylusPoints[0].ToPoint() : new Point(); var endPoint = e.Stroke.StylusPoints.Count > 0 ? e.Stroke.StylusPoints[e.Stroke.StylusPoints.Count - 1].ToPoint() : new Point(); - // 从InkCanvas中移除墨迹,因为我们要用渐隐管理器来管理它 - if (inkCanvas.Strokes.Contains(e.Stroke)) + // 确保InkCanvas保持Ink编辑模式,防止自动切换到鼠标模式 + if (inkCanvas.EditingMode != InkCanvasEditingMode.Ink) { - inkCanvas.Strokes.Remove(e.Stroke); + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } // 添加到墨迹渐隐管理器 @@ -79,6 +80,30 @@ namespace Ink_Canvas LogHelper.WriteLogToFile("StrokeCollected: 墨迹渐隐管理器为空,无法添加墨迹", LogHelper.LogType.Error); } + // 延迟移除墨迹,避免立即移除导致模式切换 + // 使用Dispatcher.BeginInvoke确保在UI线程上异步执行 + Dispatcher.BeginInvoke(new Action(() => + { + try + { + // 再次确保InkCanvas保持Ink编辑模式 + if (inkCanvas.EditingMode != InkCanvasEditingMode.Ink) + { + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + } + + // 从InkCanvas中移除墨迹,因为我们要用渐隐管理器来管理它 + if (inkCanvas.Strokes.Contains(e.Stroke)) + { + inkCanvas.Strokes.Remove(e.Stroke); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"延迟移除墨迹时出错: {ex}", LogHelper.LogType.Error); + } + }), DispatcherPriority.Background); + // 墨迹渐隐模式下不参与墨迹纠正和其他处理,直接返回 return; }