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 }