diff --git a/Ink Canvas/Windows/SettingsViews2/Pages/StartupPage.xaml.cs b/Ink Canvas/Windows/SettingsViews2/Pages/NewSettingStartup.xaml.cs similarity index 51% rename from Ink Canvas/Windows/SettingsViews2/Pages/StartupPage.xaml.cs rename to Ink Canvas/Windows/SettingsViews2/Pages/NewSettingStartup.xaml.cs index c8a808f4..c0a4f92b 100644 --- a/Ink Canvas/Windows/SettingsViews2/Pages/StartupPage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews2/Pages/NewSettingStartup.xaml.cs @@ -1,24 +1,23 @@ using System; using System.Windows; using System.Windows.Controls; -using Ink_Canvas.Helpers; namespace Ink_Canvas.Windows.SettingsViews2.Pages { /// - /// StartupPage.xaml 的交互逻辑 + /// NewSettingStartup.xaml 的交互逻辑 /// - public partial class StartupPage : Page + public partial class NewSettingStartup : Page { private bool _isLoaded = false; - public StartupPage() + public NewSettingStartup() { InitializeComponent(); - Loaded += StartupPage_Loaded; + Loaded += NewSettingStartup_Loaded; } - private void StartupPage_Loaded(object sender, RoutedEventArgs e) + private void NewSettingStartup_Loaded(object sender, RoutedEventArgs e) { LoadSettings(); _isLoaded = true; @@ -29,23 +28,35 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages /// private void LoadSettings() { + if (MainWindow.Settings == null) return; + _isLoaded = false; try { - var settings = SettingsService.Current; - // 窗口无焦点模式 - ToggleSwitchNoFocusMode.IsOn = settings.Advanced?.IsNoFocusMode ?? true; + if (MainWindow.Settings.Advanced != null) + { + ToggleSwitchNoFocusMode.IsOn = MainWindow.Settings.Advanced.IsNoFocusMode; + } // 窗口无边框模式 - ToggleSwitchWindowMode.IsOn = settings.Advanced?.WindowMode ?? true; + if (MainWindow.Settings.Advanced != null) + { + ToggleSwitchWindowMode.IsOn = MainWindow.Settings.Advanced.WindowMode; + } // 窗口置顶 - ToggleSwitchAlwaysOnTop.IsOn = settings.Advanced?.IsAlwaysOnTop ?? true; + if (MainWindow.Settings.Advanced != null) + { + ToggleSwitchAlwaysOnTop.IsOn = MainWindow.Settings.Advanced.IsAlwaysOnTop; + } // UIA置顶 - ToggleSwitchUIAccessTopMost.IsOn = settings.Advanced?.EnableUIAccessTopMost ?? false; + if (MainWindow.Settings.Advanced != null) + { + ToggleSwitchUIAccessTopMost.IsOn = MainWindow.Settings.Advanced.EnableUIAccessTopMost; + } // 开机时运行 bool runAtStartup = System.IO.File.Exists( @@ -53,10 +64,16 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages ToggleSwitchRunAtStartup.IsOn = runAtStartup; // 启动时折叠 - ToggleSwitchFoldAtStartup.IsOn = settings.Startup?.IsFoldAtStartup ?? false; + if (MainWindow.Settings.Startup != null) + { + ToggleSwitchFoldAtStartup.IsOn = MainWindow.Settings.Startup.IsFoldAtStartup; + } // 仅PPT模式 - ToggleSwitchPPTOnlyMode.IsOn = settings.ModeSettings?.IsPPTOnlyMode ?? false; + if (MainWindow.Settings.ModeSettings != null) + { + ToggleSwitchPPTOnlyMode.IsOn = MainWindow.Settings.ModeSettings.IsPPTOnlyMode; + } } catch (Exception ex) { @@ -78,8 +95,9 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchNoFocusMode.IsOn; - SettingsService.UpdateSetting("Advanced.IsNoFocusMode", newState); - ApplyWindowSettings(); + + // 使用Helper类更新设置并应用 + Windows.SettingsViews.MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchNoFocusMode", newState); } catch (Exception ex) { @@ -97,8 +115,9 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchWindowMode.IsOn; - SettingsService.UpdateSetting("Advanced.WindowMode", newState); - ApplyWindowSettings(); + + // 使用Helper类更新设置并应用 + Windows.SettingsViews.MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchWindowMode", newState); } catch (Exception ex) { @@ -116,8 +135,9 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchAlwaysOnTop.IsOn; - SettingsService.UpdateSetting("Advanced.IsAlwaysOnTop", newState); - ApplyWindowSettings(); + + // 使用Helper类更新设置并应用 + Windows.SettingsViews.MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchAlwaysOnTop", newState); } catch (Exception ex) { @@ -135,60 +155,22 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchUIAccessTopMost.IsOn; - SettingsService.UpdateSetting("Advanced.EnableUIAccessTopMost", newState); - ApplyWindowSettings(); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine($"设置UIA置顶时出错: {ex.Message}"); - } - } - - /// - /// 应用窗口设置到主窗口 - /// - private void ApplyWindowSettings() - { - try - { - var mainWindow = Application.Current.MainWindow as MainWindow; - if (mainWindow == null) return; - - var settings = SettingsService.Current; - - // 应用窗口置顶 - mainWindow.Topmost = settings.Advanced?.IsAlwaysOnTop ?? true; - - // 应用窗口模式(无边框/有边框) - if (settings.Advanced?.WindowMode ?? true) + + // 更新Settings对象 + if (MainWindow.Settings.Advanced != null) { - mainWindow.WindowStyle = WindowStyle.None; + MainWindow.Settings.Advanced.EnableUIAccessTopMost = newState; } - else - { - mainWindow.WindowStyle = WindowStyle.SingleBorderWindow; - } - - // 应用无焦点模式 - if (settings.Advanced?.IsNoFocusMode ?? true) - { - // 使用反射调用主窗口的无焦点模式设置方法 - var method = mainWindow.GetType().GetMethod("SetNoFocusMode", - System.Reflection.BindingFlags.NonPublic | - System.Reflection.BindingFlags.Public | - System.Reflection.BindingFlags.Instance); - method?.Invoke(mainWindow, new object[] { true }); - } - + + // 保存设置 + MainWindow.SaveSettingsToFile(); + // 通知其他面板同步状态 - Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchNoFocusMode"); - Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchWindowMode"); - Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchAlwaysOnTop"); Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchUIAccessTopMost"); } catch (Exception ex) { - System.Diagnostics.Debug.WriteLine($"应用窗口设置时出错: {ex.Message}"); + System.Diagnostics.Debug.WriteLine($"设置UIA置顶时出错: {ex.Message}"); } } @@ -206,7 +188,9 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchRunAtStartup.IsOn; - SetRunAtStartup(newState); + + // 使用Helper类更新设置并应用 + Windows.SettingsViews.MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchRunAtStartup", newState); } catch (Exception ex) { @@ -214,62 +198,6 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages } } - /// - /// 设置开机启动 - /// - private void SetRunAtStartup(bool enable) - { - try - { - string startupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Startup); - string shortcutPath = System.IO.Path.Combine(startupPath, "Ink Canvas Annotation.lnk"); - string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location; - - if (enable) - { - // 创建快捷方式 - if (!System.IO.File.Exists(shortcutPath)) - { - CreateShortcut(shortcutPath, exePath); - } - } - else - { - // 删除快捷方式 - if (System.IO.File.Exists(shortcutPath)) - { - System.IO.File.Delete(shortcutPath); - } - } - - // 通知其他面板同步状态 - Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchRunAtStartup"); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine($"设置开机启动失败: {ex.Message}"); - } - } - - /// - /// 创建快捷方式 - /// - private void CreateShortcut(string shortcutPath, string targetPath) - { - try - { - dynamic shell = Activator.CreateInstance(Type.GetTypeFromProgID("WScript.Shell")); - dynamic shortcut = shell.CreateShortcut(shortcutPath); - shortcut.TargetPath = targetPath; - shortcut.WorkingDirectory = System.IO.Path.GetDirectoryName(targetPath); - shortcut.Save(); - } - catch (Exception ex) - { - System.Diagnostics.Debug.WriteLine($"创建快捷方式失败: {ex.Message}"); - } - } - /// /// 开机运行后收纳到侧边栏开关事件 /// @@ -280,10 +208,9 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchFoldAtStartup.IsOn; - SettingsService.UpdateSetting("Startup.IsFoldAtStartup", newState); - - // 通知其他面板同步状态 - Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchFoldAtStartup"); + + // 使用Helper类更新设置并应用 + Windows.SettingsViews.MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchFoldAtStartup", newState); } catch (Exception ex) { @@ -305,10 +232,9 @@ namespace Ink_Canvas.Windows.SettingsViews2.Pages try { bool newState = ToggleSwitchPPTOnlyMode.IsOn; - SettingsService.UpdateSetting("ModeSettings.IsPPTOnlyMode", newState); - - // 通知其他面板同步状态 - Windows.SettingsViews.MainWindowSettingsHelper.NotifySettingsPanelsSyncState("ToggleSwitchMode"); + + // 使用Helper类更新设置并应用 + Windows.SettingsViews.MainWindowSettingsHelper.InvokeToggleSwitchToggled("ToggleSwitchMode", newState); } catch (Exception ex) {