refactor(插件设置): 移除静态属性并优化页面导航逻辑
将 PluginSettingsPage 的 CurrentPlugin 从静态属性改为实例属性,避免状态共享问题 重构 SettingsWindow 的导航逻辑,支持直接传递插件信息并避免重复导航
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user