refactor(插件设置): 移除静态属性并优化页面导航逻辑

将 PluginSettingsPage 的 CurrentPlugin 从静态属性改为实例属性,避免状态共享问题
重构 SettingsWindow 的导航逻辑,支持直接传递插件信息并避免重复导航
This commit is contained in:
PrefacedCorg
2026-04-30 00:08:09 +08:00
parent d23193527e
commit 8b53456b5d
2 changed files with 24 additions and 12 deletions
@@ -8,14 +8,18 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
{ {
public partial class PluginSettingsPage : iNKORE.UI.WPF.Modern.Controls.Page 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; } get { return _currentPlugin; }
set set
{ {
_currentPlugin = value; _currentPlugin = value;
if (IsLoaded && _currentPlugin != null)
{
LoadPluginSettings();
}
} }
} }
@@ -259,23 +259,26 @@ namespace Ink_Canvas.Windows.SettingsViews
string tag = selectedItem.Tag as string; string tag = selectedItem.Tag as string;
if (!string.IsNullOrEmpty(tag) && _pageTypes.ContainsKey(tag)) if (!string.IsNullOrEmpty(tag) && _pageTypes.ContainsKey(tag))
{ {
// 如果是插件设置页面,设置当前插件 Ink_Canvas.Plugins.PluginInfo pluginInfo = null;
if (_pluginPages.TryGetValue(tag, out var plugin)) _pluginPages.TryGetValue(tag, out pluginInfo);
{
PluginSettingsPage.CurrentPlugin = plugin;
}
// 避免重复导航到当前页面 object cachedPage = null;
if (rootFrame.SourcePageType != _pageTypes[tag]) _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; 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; if (!_pageTypes.TryGetValue(pageTag, out Type pageType)) return;
@@ -289,7 +292,12 @@ namespace Ink_Canvas.Windows.SettingsViews
_pages.Add(pageTag, cachedPage); _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) catch (Exception ex)
{ {