From 16c86cd02dc8cdf2eeca021daf46c03f8d2270f3 Mon Sep 17 00:00:00 2001 From: PANDAJSR Date: Sun, 5 Apr 2026 09:53:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B8=BA=E6=89=98=E7=9B=98=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E6=B7=BB=E5=8A=A0=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=20(#405)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 软件设置内的贡献者列表添加了 PANDA-JSR * feat(tray): add separate entries for new/legacy settings * feat(tray): merge settings menu entries * fix: use ikw namespace for tray menu stack panel --- Ink Canvas/App.xaml | 10 ++++ Ink Canvas/MainWindow_cs/MW_TrayIcon.cs | 73 ++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/Ink Canvas/App.xaml b/Ink Canvas/App.xaml index 77e1eeee..39bb6117 100644 --- a/Ink Canvas/App.xaml +++ b/Ink Canvas/App.xaml @@ -32,6 +32,16 @@ + + + + + + + + + + diff --git a/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs b/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs index f266aec0..302dfac7 100644 --- a/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs +++ b/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs @@ -3,6 +3,8 @@ using Ink_Canvas.Helpers; using iNKORE.UI.WPF.Controls; using System; using System.Diagnostics; +using System.Linq; +using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Forms; @@ -37,7 +39,9 @@ namespace Ink_Canvas var FoldFloatingBarTrayIconMenuItemIconEyeOn = (Image)((Grid)((MenuItem)s.Items[s.Items.Count - 5]).Icon).Children[1]; var FoldFloatingBarTrayIconMenuItemHeaderText = (TextBlock)((SimpleStackPanel)((MenuItem)s.Items[s.Items.Count - 5]).Header).Children[0]; var ResetFloatingBarPositionTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 4]; - var HideICCMainWindowTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 9]; + var HideICCMainWindowTrayIconMenuItem = s.Items.OfType() + .FirstOrDefault(mi => mi.Name == "HideICCMainWindowTrayIconMenuItem"); + if (HideICCMainWindowTrayIconMenuItem == null) return; var mainWin = (MainWindow)Current.MainWindow; if (mainWin.IsLoaded) { @@ -84,6 +88,73 @@ namespace Ink_Canvas /// 1. 获取主窗口实例 /// 2. 如果主窗口已加载,且在无焦点模式下启用了始终置顶,则恢复主窗口的置顶状态 /// + private bool EnsureMainWindowReadyForSettings(MainWindow mainWin) + { + if (mainWin?.IsLoaded != true) + { + return false; + } + + var trayMenu = ((TaskbarIcon)Current.Resources["TaskbarTrayIcon"]).ContextMenu; + var hideMainWindowMenuItem = trayMenu?.Items.OfType() + .FirstOrDefault(mi => mi.Name == "HideICCMainWindowTrayIconMenuItem"); + + if (hideMainWindowMenuItem != null && hideMainWindowMenuItem.IsChecked) + { + hideMainWindowMenuItem.IsChecked = false; + } + else if (!mainWin.IsVisible) + { + mainWin.Show(); + } + + if (mainWin.WindowState == WindowState.Minimized) + { + mainWin.WindowState = WindowState.Normal; + } + + mainWin.Activate(); + return true; + } + + private bool IsLegacySettingsVisible(MainWindow mainWin) + { + try + { + var borderSettingsField = typeof(MainWindow).GetField("BorderSettings", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + var borderSettings = borderSettingsField?.GetValue(mainWin) as FrameworkElement; + return borderSettings?.Visibility == Visibility.Visible; + } + catch + { + return false; + } + } + + private void OpenSettingsTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e) + { + var mainWin = Current.MainWindow as MainWindow; + if (!EnsureMainWindowReadyForSettings(mainWin)) + { + return; + } + + if (IsLegacySettingsVisible(mainWin)) + { + return; + } + + try + { + var method = typeof(MainWindow).GetMethod("BtnSettings_Click", BindingFlags.NonPublic | BindingFlags.Instance); + method?.Invoke(mainWin, new object[] { null, null }); + } + catch (Exception ex) + { + LogHelper.WriteLogToFile($"Open settings from tray failed: {ex.Message}", LogHelper.LogType.Error); + } + } + private void SysTrayMenu_Closed(object sender, RoutedEventArgs e) { var mainWin = (MainWindow)Current.MainWindow;