From 097d414d0d6a6b72a13cc5f5dd4418fd2d208579 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 30 Aug 2025 18:33:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E9=9A=90=E8=97=8F=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=E9=AB=98=E5=85=89=E9=94=99=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow_cs/MW_FloatingBarIcons.cs | 68 +++++++++++++++++-- Ink Canvas/MainWindow_cs/MW_Settings.cs | 19 ++++++ 2 files changed, 80 insertions(+), 7 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index af76a843..33f42f87 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -2971,13 +2971,13 @@ namespace Ink_Canvas quickColorPaletteMode = "single"; } - // 获取实际按钮宽度,如果获取不到则使用默认值 - double cursorWidth = Cursor_Icon?.ActualWidth > 0 ? Cursor_Icon.ActualWidth : buttonWidth; - double penWidth = Pen_Icon?.ActualWidth > 0 ? Pen_Icon.ActualWidth : buttonWidth; - double deleteWidth = SymbolIconDelete?.ActualWidth > 0 ? SymbolIconDelete.ActualWidth : buttonWidth; - double eraserWidth = Eraser_Icon?.ActualWidth > 0 ? Eraser_Icon.ActualWidth : buttonWidth; - double eraserByStrokesWidth = EraserByStrokes_Icon?.ActualWidth > 0 ? EraserByStrokes_Icon.ActualWidth : buttonWidth; - double selectWidth = SymbolIconSelect?.ActualWidth > 0 ? SymbolIconSelect.ActualWidth : buttonWidth; + // 获取实际按钮宽度,如果获取不到则使用默认值,同时考虑按钮的可见性 + double cursorWidth = (Cursor_Icon?.Visibility == Visibility.Visible && Cursor_Icon?.ActualWidth > 0) ? Cursor_Icon.ActualWidth : 0; + double penWidth = (Pen_Icon?.Visibility == Visibility.Visible && Pen_Icon?.ActualWidth > 0) ? Pen_Icon.ActualWidth : 0; + double deleteWidth = (SymbolIconDelete?.Visibility == Visibility.Visible && SymbolIconDelete?.ActualWidth > 0) ? SymbolIconDelete.ActualWidth : 0; + double eraserWidth = (Eraser_Icon?.Visibility == Visibility.Visible && Eraser_Icon?.ActualWidth > 0) ? Eraser_Icon.ActualWidth : 0; + double eraserByStrokesWidth = (EraserByStrokes_Icon?.Visibility == Visibility.Visible && EraserByStrokes_Icon?.ActualWidth > 0) ? EraserByStrokes_Icon.ActualWidth : 0; + double selectWidth = (SymbolIconSelect?.Visibility == Visibility.Visible && SymbolIconSelect?.ActualWidth > 0) ? SymbolIconSelect.ActualWidth : 0; // 获取高光的实际宽度 double actualHighlightWidth = FloatingbarSelectionBG.ActualWidth > 0 ? FloatingbarSelectionBG.ActualWidth : highlightWidth; @@ -3074,6 +3074,60 @@ namespace Ink_Canvas } } + /// + /// 获取当前选中的模式 + /// + /// 当前选中的模式名称 + public string GetCurrentSelectedMode() + { + try + { + // 检查当前编辑模式 + if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) + { + return "select"; + } + else if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) + { + // 检查是否是荧光笔模式 + if (drawingAttributes != null && drawingAttributes.IsHighlighter) + { + return "color"; + } + else + { + return "pen"; + } + } + else if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) + { + // 检查是面积擦还是线擦 + if (Eraser_Icon != null && Eraser_Icon.Visibility == Visibility.Visible) + { + return "eraser"; + } + else if (EraserByStrokes_Icon != null && EraserByStrokes_Icon.Visibility == Visibility.Visible) + { + return "eraserByStrokes"; + } + } + else if (inkCanvas.EditingMode == InkCanvasEditingMode.None) + { + return "cursor"; + } + else if (drawingShapeMode != 0) + { + return "shape"; + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"获取当前选中模式失败: {ex.Message}", LogHelper.LogType.Error); + } + + return string.Empty; + } + #endregion #region 触摸事件支持 diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index 9d7ca62a..220abb99 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -2675,6 +2675,25 @@ namespace Ink_Canvas break; } } + + // 在按钮可见性更新后,重新计算当前高光位置 + // 延迟执行以确保UI更新完成 + Dispatcher.BeginInvoke(new Action(() => + { + try + { + // 获取当前选中的模式并重新设置高光位置 + string currentMode = GetCurrentSelectedMode(); + if (!string.IsNullOrEmpty(currentMode)) + { + SetFloatingBarHighlightPosition(currentMode); + } + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"重新计算高光位置失败: {ex.Message}", LogHelper.LogType.Error); + } + }), System.Windows.Threading.DispatcherPriority.Loaded); } catch (Exception ex) {