From 77702b2ac91502ea6ffc24e9e383bfb8f468dcf1 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sun, 7 Sep 2025 00:49:10 +0800 Subject: [PATCH] fix:issue #170 --- Ink Canvas/MainWindow.xaml.cs | 12 ++++++---- .../MainWindow_cs/MW_ClipboardHandler.cs | 5 +++++ .../MainWindow_cs/MW_ElementsControls.cs | 5 +++++ .../MainWindow_cs/MW_FloatingBarIcons.cs | 22 +++++++++++++++++++ Ink Canvas/MainWindow_cs/MW_ImageInsert.cs | 5 +++++ .../MainWindow_cs/MW_SelectionGestures.cs | 11 ++++++++-- Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs | 7 ++++++ 7 files changed, 61 insertions(+), 6 deletions(-) diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index 722b6456..000ded77 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -1032,12 +1032,16 @@ namespace Ink_Canvas // 如果当前有选中的元素,取消选中状态 if (currentSelectedElement != null) { - // 保存当前编辑模式 - var previousEditingMode = inkCanvas.EditingMode; + // 取消选中元素 UnselectElement(currentSelectedElement); - // 恢复编辑模式 - inkCanvas.EditingMode = previousEditingMode; currentSelectedElement = null; + + // 重置为选择模式,确保用户可以继续选择其他元素 + SetCurrentToolMode(InkCanvasEditingMode.Select); + // 更新模式缓存 + UpdateCurrentToolMode("select"); + // 刷新浮动栏高光显示 + SetFloatingBarHighlightPosition("select"); } } } diff --git a/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs b/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs index 7ff64b76..7d07d991 100644 --- a/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs +++ b/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs @@ -205,6 +205,11 @@ namespace Ink_Canvas // 提交到历史记录 timeMachine.CommitElementInsertHistory(image); + // 插入图片后切换到选择模式并刷新浮动栏高光显示 + SetCurrentToolMode(InkCanvasEditingMode.Select); + UpdateCurrentToolMode("select"); + HideSubPanels("select"); + ShowNotification("图片已从剪贴板粘贴"); } catch (Exception ex) diff --git a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs index 1e356ec7..7b1440de 100644 --- a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs @@ -68,6 +68,11 @@ namespace Ink_Canvas }; timeMachine.CommitElementInsertHistory(image); + + // 插入图片后切换到选择模式并刷新浮动栏高光显示 + SetCurrentToolMode(InkCanvasEditingMode.Select); + UpdateCurrentToolMode("select"); + HideSubPanels("select"); } } } diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 8afa8670..74bfcddc 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -1851,6 +1851,13 @@ namespace Ink_Canvas ((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent); if (sender == Pen_Icon && lastBorderMouseDownObject != Pen_Icon) return; + // 如果当前有选中的图片元素,先取消选中 + if (currentSelectedElement != null) + { + UnselectElement(currentSelectedElement); + currentSelectedElement = null; + } + // 禁用高级橡皮擦系统 DisableAdvancedEraserSystem(); @@ -3099,6 +3106,11 @@ namespace Ink_Canvas } timeMachine.CommitElementInsertHistory(image); + + // 插入图片后切换到选择模式并刷新浮动栏高光显示 + SetCurrentToolMode(InkCanvasEditingMode.Select); + UpdateCurrentToolMode("select"); + HideSubPanels("select"); } } } @@ -3165,6 +3177,11 @@ namespace Ink_Canvas } timeMachine.CommitElementInsertHistory(image); + + // 插入图片后切换到选择模式并刷新浮动栏高光显示 + SetCurrentToolMode(InkCanvasEditingMode.Select); + UpdateCurrentToolMode("select"); + HideSubPanels("select"); } } } @@ -3231,6 +3248,11 @@ namespace Ink_Canvas } timeMachine.CommitElementInsertHistory(image); + + // 插入图片后切换到选择模式并刷新浮动栏高光显示 + SetCurrentToolMode(InkCanvasEditingMode.Select); + UpdateCurrentToolMode("select"); + HideSubPanels("select"); } } } diff --git a/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs b/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs index 9e7c89d5..6c77b485 100644 --- a/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs +++ b/Ink Canvas/MainWindow_cs/MW_ImageInsert.cs @@ -216,6 +216,11 @@ namespace Ink_Canvas // 提交历史记录 timeMachine.CommitElementInsertHistory(image); + // 插入图片后切换到选择模式并刷新浮动栏高光显示 + SetCurrentToolMode(InkCanvasEditingMode.Select); + UpdateCurrentToolMode("select"); + HideSubPanels("select"); + ShowNotification("截图已插入到画布"); } catch (Exception ex) diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index e3ea3b83..1b6acdcf 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -336,7 +336,7 @@ namespace Ink_Canvas { var borderLeft = (inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Right - BorderStrokeSelectionControlWidth) / 2; - var borderTop = inkCanvas.GetSelectionBounds().Bottom + 1; + var borderTop = inkCanvas.GetSelectionBounds().Bottom + 10; // 在墨迹下方10像素处显示 if (borderLeft < 0) borderLeft = 0; if (borderTop < 0) borderTop = 0; if (Width - borderLeft < BorderStrokeSelectionControlWidth || double.IsNaN(borderLeft)) @@ -344,7 +344,14 @@ namespace Ink_Canvas if (Height - borderTop < BorderStrokeSelectionControlHeight || double.IsNaN(borderTop)) borderTop = Height - BorderStrokeSelectionControlHeight; - if (borderTop > 60) borderTop -= 60; + // 确保墨迹选中栏始终显示在墨迹下方 + // 如果选中栏会超出屏幕底部,则显示在墨迹上方 + if (borderTop + BorderStrokeSelectionControlHeight > Height) + { + borderTop = inkCanvas.GetSelectionBounds().Top - BorderStrokeSelectionControlHeight - 10; + if (borderTop < 0) borderTop = 10; // 如果上方也没有空间,则显示在顶部 + } + BorderStrokeSelectionControl.Margin = new Thickness(borderLeft, borderTop, 0, 0); } diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs index 9cc3731b..d2675fa9 100644 --- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs +++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs @@ -118,6 +118,13 @@ namespace Ink_Canvas private void BtnPen_Click(object sender, RoutedEventArgs e) { + // 如果当前有选中的图片元素,先取消选中 + if (currentSelectedElement != null) + { + UnselectElement(currentSelectedElement); + currentSelectedElement = null; + } + // 禁用高级橡皮擦系统 DisableAdvancedEraserSystem();