From 8b53456b5d2c0b946c7d508a4856238e0cf6cd6d Mon Sep 17 00:00:00 2001 From: PrefacedCorg <1876568293@qq.com> Date: Thu, 30 Apr 2026 00:08:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=8F=92=E4=BB=B6=E8=AE=BE=E7=BD=AE):?= =?UTF-8?q?=20=E7=A7=BB=E9=99=A4=E9=9D=99=E6=80=81=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 PluginSettingsPage 的 CurrentPlugin 从静态属性改为实例属性,避免状态共享问题 重构 SettingsWindow 的导航逻辑,支持直接传递插件信息并避免重复导航 --- .../Pages/PluginSettingsPage.xaml.cs | 8 ++++-- .../SettingsViews/SettingsWindow.xaml.cs | 28 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PluginSettingsPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/PluginSettingsPage.xaml.cs index 6c84559e..5e14af55 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/PluginSettingsPage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/Pages/PluginSettingsPage.xaml.cs @@ -8,14 +8,18 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages { public partial class PluginSettingsPage : iNKORE.UI.WPF.Modern.Controls.Page { - private static PluginInfo _currentPlugin; + private PluginInfo _currentPlugin; - public static PluginInfo CurrentPlugin + public PluginInfo CurrentPlugin { get { return _currentPlugin; } set { _currentPlugin = value; + if (IsLoaded && _currentPlugin != null) + { + LoadPluginSettings(); + } } } diff --git a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs index 4aa77f9f..7b6f3d03 100644 --- a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs @@ -259,23 +259,26 @@ namespace Ink_Canvas.Windows.SettingsViews string tag = selectedItem.Tag as string; if (!string.IsNullOrEmpty(tag) && _pageTypes.ContainsKey(tag)) { - // 如果是插件设置页面,设置当前插件 - if (_pluginPages.TryGetValue(tag, out var plugin)) - { - PluginSettingsPage.CurrentPlugin = plugin; - } + Ink_Canvas.Plugins.PluginInfo pluginInfo = null; + _pluginPages.TryGetValue(tag, out pluginInfo); - // 避免重复导航到当前页面 - if (rootFrame.SourcePageType != _pageTypes[tag]) + object cachedPage = null; + _pages.TryGetValue(tag, out cachedPage); + + if (cachedPage == null || rootFrame.Content != cachedPage) { - NavigateToPage(tag); + NavigateToPage(tag, pluginInfo); + } + else if (cachedPage is PluginSettingsPage pluginSettingsPage && pluginInfo != null) + { + pluginSettingsPage.CurrentPlugin = pluginInfo; } NavigationViewControl.Header = selectedItem.Content; } } } - public void NavigateToPage(string pageTag) + public void NavigateToPage(string pageTag, Ink_Canvas.Plugins.PluginInfo pluginInfo = null) { if (!_pageTypes.TryGetValue(pageTag, out Type pageType)) return; @@ -289,7 +292,12 @@ namespace Ink_Canvas.Windows.SettingsViews _pages.Add(pageTag, cachedPage); } - rootFrame.Navigate(cachedPage.GetType(), cachedPage); + if (cachedPage is PluginSettingsPage pluginSettingsPage && pluginInfo != null) + { + pluginSettingsPage.CurrentPlugin = pluginInfo; + } + + rootFrame.Navigate(cachedPage); } catch (Exception ex) {