From 49f268bb6285500994694d9f514f22a103e2e3d5 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Sat, 6 Sep 2025 14:48:36 +0800
Subject: [PATCH] =?UTF-8?q?improve:=E5=BF=AB=E6=8D=B7=E9=94=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Helpers/GlobalHotkeyManager.cs | 258 +-----------------
Ink Canvas/Resources/Settings.cs | 6 +-
Ink Canvas/Windows/HotkeySettingsWindow.xaml | 18 +-
.../Windows/HotkeySettingsWindow.xaml.cs | 95 ++++---
4 files changed, 70 insertions(+), 307 deletions(-)
diff --git a/Ink Canvas/Helpers/GlobalHotkeyManager.cs b/Ink Canvas/Helpers/GlobalHotkeyManager.cs
index 046ac0e9..a5640467 100644
--- a/Ink Canvas/Helpers/GlobalHotkeyManager.cs
+++ b/Ink Canvas/Helpers/GlobalHotkeyManager.cs
@@ -3,7 +3,6 @@ using NHotkey.Wpf;
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Input;
@@ -20,7 +19,6 @@ namespace Ink_Canvas.Helpers
private readonly MainWindow _mainWindow;
private bool _isDisposed;
private bool _hotkeysShouldBeRegistered = true; // 启动时注册热键
- private bool _enableHotkeysInMouseMode = false; // 是否在鼠标模式下启用快捷键
// 配置文件路径
private static readonly string HotkeyConfigFile = Path.Combine(App.RootPath, "HotkeyConfig.json");
@@ -404,16 +402,16 @@ namespace Ink_Canvas.Helpers
{
if (isMouseMode)
{
- // 鼠标模式下根据设置决定是否禁用快捷键
- if (_enableHotkeysInMouseMode)
+ // 检查设置中是否允许在鼠标模式下启用快捷键
+ if (MainWindow.Settings.Appearance.EnableHotkeysInMouseMode)
{
- // 如果启用了鼠标模式快捷键,则保持快捷键注册
+ // 如果设置允许,则在鼠标模式下也启用快捷键
EnableHotkeyRegistration();
- LogHelper.WriteLogToFile("切换到鼠标模式,但保持快捷键启用(用户设置)");
+ LogHelper.WriteLogToFile("切换到鼠标模式,但根据设置保持快捷键启用");
}
else
{
- // 如果未启用鼠标模式快捷键,则禁用快捷键以放行键盘操作
+ // 鼠标模式下禁用快捷键,让键盘操作放行
DisableHotkeyRegistration();
LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作");
}
@@ -820,251 +818,6 @@ namespace Ink_Canvas.Helpers
}
}
- ///
- /// 设置是否在鼠标模式下启用快捷键
- ///
- /// 是否启用
- public void SetEnableHotkeysInMouseMode(bool enable)
- {
- try
- {
- _enableHotkeysInMouseMode = enable;
-
- // 保存到主设置配置文件
- SaveMouseModeHotkeySettingToMainConfig();
-
- LogHelper.WriteLogToFile($"设置鼠标模式快捷键开关: {enable}");
-
- // 立即应用设置,如果当前是鼠标模式则重新更新状态
- var isCurrentlyMouseMode = IsInSelectMode();
- if (isCurrentlyMouseMode)
- {
- UpdateHotkeyStateForToolMode(true);
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"设置鼠标模式快捷键开关时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
- ///
- /// 获取是否在鼠标模式下启用快捷键
- ///
- /// 是否启用
- public bool GetEnableHotkeysInMouseMode()
- {
- try
- {
- // 从主设置配置文件加载设置
- LoadMouseModeHotkeySettingFromMainConfig();
- return _enableHotkeysInMouseMode;
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"获取鼠标模式快捷键开关时出错: {ex.Message}", LogHelper.LogType.Error);
- return false; // 默认关闭
- }
- }
-
- ///
- /// 从主设置配置文件加载鼠标模式快捷键设置
- ///
- private void LoadMouseModeHotkeySettingFromMainConfig()
- {
- try
- {
- // 通过反射访问主窗口的Settings属性
- var settingsProperty = _mainWindow.GetType().GetProperty("Settings", BindingFlags.Public | BindingFlags.Instance);
- if (settingsProperty != null)
- {
- var settings = settingsProperty.GetValue(_mainWindow);
- if (settings != null)
- {
- // 获取Advanced属性
- var advancedProperty = settings.GetType().GetProperty("Advanced");
- if (advancedProperty != null)
- {
- var advanced = advancedProperty.GetValue(settings);
- if (advanced != null)
- {
- // 获取EnableHotkeysInMouseMode属性
- var enableHotkeysProperty = advanced.GetType().GetProperty("EnableHotkeysInMouseMode");
- if (enableHotkeysProperty != null)
- {
- var value = enableHotkeysProperty.GetValue(advanced);
- if (value is bool boolValue)
- {
- _enableHotkeysInMouseMode = boolValue;
- LogHelper.WriteLogToFile($"从主设置配置文件加载鼠标模式快捷键设置: {_enableHotkeysInMouseMode}");
- return;
- }
- }
- }
- }
- }
- }
-
- // 如果无法从主设置加载,使用默认值
- _enableHotkeysInMouseMode = false;
- LogHelper.WriteLogToFile("无法从主设置配置文件加载鼠标模式快捷键设置,使用默认值: false");
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"从主设置配置文件加载鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error);
- _enableHotkeysInMouseMode = false; // 默认关闭
- }
- }
-
- ///
- /// 从配置文件加载鼠标模式快捷键设置(旧方法,保留兼容性)
- ///
- private void LoadMouseModeHotkeySetting()
- {
- try
- {
- if (!File.Exists(HotkeyConfigFile))
- {
- _enableHotkeysInMouseMode = false; // 默认关闭
- return;
- }
-
- var json = File.ReadAllText(HotkeyConfigFile, Encoding.UTF8);
- var config = JsonConvert.DeserializeObject(json);
-
- if (config != null)
- {
- // 查找鼠标模式快捷键设置
- var mouseModeSetting = config.Hotkeys?.FirstOrDefault(h => h.Name == "EnableHotkeysInMouseMode");
- if (mouseModeSetting != null)
- {
- _enableHotkeysInMouseMode = mouseModeSetting.EnableHotkeysInMouseMode;
- LogHelper.WriteLogToFile($"从配置文件加载鼠标模式快捷键设置: {_enableHotkeysInMouseMode}");
- }
- else
- {
- _enableHotkeysInMouseMode = false; // 默认关闭
- }
- }
- else
- {
- _enableHotkeysInMouseMode = false; // 默认关闭
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"从配置文件加载鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error);
- _enableHotkeysInMouseMode = false; // 默认关闭
- }
- }
-
- ///
- /// 保存鼠标模式快捷键设置到主设置配置文件
- ///
- private void SaveMouseModeHotkeySettingToMainConfig()
- {
- try
- {
- // 通过反射访问主窗口的Settings属性
- var settingsProperty = _mainWindow.GetType().GetProperty("Settings", BindingFlags.Public | BindingFlags.Instance);
- if (settingsProperty != null)
- {
- var settings = settingsProperty.GetValue(_mainWindow);
- if (settings != null)
- {
- // 获取Advanced属性
- var advancedProperty = settings.GetType().GetProperty("Advanced");
- if (advancedProperty != null)
- {
- var advanced = advancedProperty.GetValue(settings);
- if (advanced != null)
- {
- // 设置EnableHotkeysInMouseMode属性
- var enableHotkeysProperty = advanced.GetType().GetProperty("EnableHotkeysInMouseMode");
- if (enableHotkeysProperty != null)
- {
- enableHotkeysProperty.SetValue(advanced, _enableHotkeysInMouseMode);
-
- // 触发主窗口的保存设置方法
- var saveSettingsMethod = _mainWindow.GetType().GetMethod("SaveSettings", BindingFlags.NonPublic | BindingFlags.Instance);
- if (saveSettingsMethod != null)
- {
- saveSettingsMethod.Invoke(_mainWindow, null);
- LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到主设置配置文件: {_enableHotkeysInMouseMode}");
- }
- else
- {
- LogHelper.WriteLogToFile("无法找到SaveSettings方法", LogHelper.LogType.Warning);
- }
- }
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到主设置配置文件时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
- ///
- /// 保存鼠标模式快捷键设置到配置文件(旧方法,保留兼容性)
- ///
- private void SaveMouseModeHotkeySetting()
- {
- try
- {
- HotkeyConfig config;
-
- if (File.Exists(HotkeyConfigFile))
- {
- var json = File.ReadAllText(HotkeyConfigFile, Encoding.UTF8);
- config = JsonConvert.DeserializeObject(json) ?? new HotkeyConfig();
- }
- else
- {
- config = new HotkeyConfig();
- }
-
- // 确保Hotkeys列表存在
- if (config.Hotkeys == null)
- {
- config.Hotkeys = new List();
- }
-
- // 查找或创建鼠标模式快捷键设置项
- var mouseModeSetting = config.Hotkeys.FirstOrDefault(h => h.Name == "EnableHotkeysInMouseMode");
- if (mouseModeSetting == null)
- {
- mouseModeSetting = new HotkeyConfigItem
- {
- Name = "EnableHotkeysInMouseMode",
- EnableHotkeysInMouseMode = _enableHotkeysInMouseMode
- };
- config.Hotkeys.Add(mouseModeSetting);
- }
- else
- {
- mouseModeSetting.EnableHotkeysInMouseMode = _enableHotkeysInMouseMode;
- }
-
- // 更新配置信息
- config.Version = "1.0";
- config.LastModified = DateTime.Now;
-
- // 保存到文件
- var jsonString = JsonConvert.SerializeObject(config, Formatting.Indented);
- File.WriteAllText(HotkeyConfigFile, jsonString, Encoding.UTF8);
-
- LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到配置文件: {_enableHotkeysInMouseMode}");
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"保存鼠标模式快捷键设置到配置文件时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
#endregion
@@ -1115,7 +868,6 @@ namespace Ink_Canvas.Helpers
public string Name { get; set; }
public Key Key { get; set; }
public ModifierKeys Modifiers { get; set; }
- public bool EnableHotkeysInMouseMode { get; set; }
}
#endregion
}
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index d8c6ac3a..0f757ef9 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -233,6 +233,9 @@ namespace Ink_Canvas
[JsonProperty("quickColorPaletteDisplayMode")]
public int QuickColorPaletteDisplayMode { get; set; } = 1;
+ [JsonProperty("enableHotkeysInMouseMode")]
+ public bool EnableHotkeysInMouseMode { get; set; } = false;
+
}
public class PowerPointSettings
@@ -498,9 +501,6 @@ namespace Ink_Canvas
[JsonProperty("isEnableAvoidFullScreenHelper")]
public bool IsEnableAvoidFullScreenHelper { get; set; }
- [JsonProperty("enableHotkeysInMouseMode")]
- public bool EnableHotkeysInMouseMode { get; set; } = false;
-
[JsonProperty("isAutoBackupBeforeUpdate")]
public bool IsAutoBackupBeforeUpdate { get; set; } = true;
diff --git a/Ink Canvas/Windows/HotkeySettingsWindow.xaml b/Ink Canvas/Windows/HotkeySettingsWindow.xaml
index e8c41995..6c89c1f8 100644
--- a/Ink Canvas/Windows/HotkeySettingsWindow.xaml
+++ b/Ink Canvas/Windows/HotkeySettingsWindow.xaml
@@ -52,14 +52,16 @@
-
-
+
+
+
+
diff --git a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs
index f92949f9..f59988b4 100644
--- a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs
+++ b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs
@@ -42,6 +42,9 @@ namespace Ink_Canvas.Windows
// 加载当前快捷键(包括配置文件中的)
LoadCurrentHotkeys();
SetupEventHandlers();
+
+ // 初始化鼠标模式快捷键设置
+ InitializeMouseModeSettings();
}
catch (Exception ex)
{
@@ -153,9 +156,6 @@ namespace Ink_Canvas.Windows
LogHelper.WriteLogToFile($"设置默认显示值: {hotkeyItem.HotkeyName}");
}
}
-
- // 加载鼠标模式快捷键设置
- LoadMouseModeHotkeySetting();
}
catch (Exception ex)
{
@@ -242,9 +242,56 @@ namespace Ink_Canvas.Windows
{
hotkeyItem.HotkeyChanged += OnHotkeyChanged;
}
+ }
- // 为鼠标模式快捷键开关设置事件处理器
- EnableHotkeysInMouseModeToggle.Toggled += EnableHotkeysInMouseModeToggle_Toggled;
+ ///
+ /// 初始化鼠标模式快捷键设置
+ ///
+ private void InitializeMouseModeSettings()
+ {
+ try
+ {
+ // 设置开关的初始状态
+ ToggleSwitchEnableHotkeysInMouseMode.IsOn = MainWindow.Settings.Appearance.EnableHotkeysInMouseMode;
+
+ // 绑定开关变化事件
+ ToggleSwitchEnableHotkeysInMouseMode.Toggled += OnMouseModeHotkeyToggleChanged;
+
+ LogHelper.WriteLogToFile($"鼠标模式快捷键设置已初始化: {MainWindow.Settings.Appearance.EnableHotkeysInMouseMode}");
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"初始化鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ ///
+ /// 鼠标模式快捷键开关变化事件处理
+ ///
+ private void OnMouseModeHotkeyToggleChanged(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ // 更新设置
+ MainWindow.Settings.Appearance.EnableHotkeysInMouseMode = ToggleSwitchEnableHotkeysInMouseMode.IsOn;
+
+ // 立即保存设置
+ MainWindow.SaveSettingsToFile();
+
+ // 如果快捷键管理器存在,立即更新快捷键状态
+ if (_hotkeyManager != null)
+ {
+ // 检查当前是否处于鼠标模式
+ bool isCurrentlyMouseMode = _mainWindow.inkCanvas.EditingMode == InkCanvasEditingMode.None;
+ _hotkeyManager.UpdateHotkeyStateForToolMode(isCurrentlyMouseMode);
+ }
+
+ LogHelper.WriteLogToFile($"鼠标模式快捷键设置已更新: {MainWindow.Settings.Appearance.EnableHotkeysInMouseMode}", LogHelper.LogType.Event);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"更新鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error);
+ }
}
private void OnHotkeyChanged(object sender, HotkeyChangedEventArgs e)
@@ -561,44 +608,6 @@ namespace Ink_Canvas.Windows
MessageBox.Show($"保存快捷键设置时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
-
- ///
- /// 鼠标模式快捷键开关切换事件
- ///
- private void EnableHotkeysInMouseModeToggle_Toggled(object sender, RoutedEventArgs e)
- {
- try
- {
- var isEnabled = EnableHotkeysInMouseModeToggle.IsOn;
- LogHelper.WriteLogToFile($"鼠标模式快捷键开关状态变更: {isEnabled}");
-
- // 立即更新快捷键管理器的设置
- _hotkeyManager.SetEnableHotkeysInMouseMode(isEnabled);
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"处理鼠标模式快捷键开关切换时出错: {ex.Message}", LogHelper.LogType.Error);
- }
- }
-
- ///
- /// 加载鼠标模式快捷键设置
- ///
- private void LoadMouseModeHotkeySetting()
- {
- try
- {
- var isEnabled = _hotkeyManager.GetEnableHotkeysInMouseMode();
- EnableHotkeysInMouseModeToggle.IsOn = isEnabled;
- LogHelper.WriteLogToFile($"从主设置配置文件加载鼠标模式快捷键设置: {isEnabled}");
- }
- catch (Exception ex)
- {
- LogHelper.WriteLogToFile($"加载鼠标模式快捷键设置时出错: {ex.Message}", LogHelper.LogType.Error);
- // 默认关闭
- EnableHotkeysInMouseModeToggle.IsOn = false;
- }
- }
#endregion
}