From c3335c0c24eb1c06ae0f051306c4dee3a48fe1e6 Mon Sep 17 00:00:00 2001
From: PrefacedCorg <1876568293@qq.com>
Date: Fri, 3 Apr 2026 19:30:06 +0800
Subject: [PATCH] Update SettingsWindow.xaml.cs
---
.../SettingsViews/SettingsWindow.xaml.cs | 713 +++++++++---------
1 file changed, 363 insertions(+), 350 deletions(-)
diff --git a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs
index 5cf1fbdc..21ae65e6 100644
--- a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs
+++ b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs
@@ -21,7 +21,7 @@ namespace Ink_Canvas.Windows
/// 初始化设置窗口的 UI、事件和面板并加载初始状态与主题。
///
///
- /// 构造函数完成以下工作:获取主窗口引用,注册搜索与菜单事件,构建并绑定侧栏条目,挂接各设置面板的滚动/阴影事件,初始化面板数组、滚动容器、标题与名称映射,设置初始选中项与主题状态,为自定义滑块添加触摸支持,预加载所有面板设置,并多次应用主题以确保视觉元素正确呈现(包含延迟再应用以修正标题栏等)。
+ /// 构造函数完成以下工作:获取主窗口引用,注册搜索与菜单事件,构建并绑定侧栏条目,挂接各设置面板的滚动/阴影事件,初始化面板配置,设置初始选中项与主题状态,为自定义滑块添加触摸支持,预加载所有面板设置,并多次应用主题以确保视觉元素正确呈现(包含延迟再应用以修正标题栏等)。
///
public SettingsWindow()
{
@@ -30,282 +30,12 @@ namespace Ink_Canvas.Windows
// 获取 MainWindow 实例
_mainWindow = Application.Current.MainWindow as MainWindow;
- // 初始化搜索面板事件
- SearchPanelControl.NavigateToItem += SearchPanel_NavigateToItem;
- SearchPanelControl.CloseSearch += SearchPanel_CloseSearch;
-
- // 订阅菜单关闭事件,确保状态同步
- if (MenuButtonContextMenu != null)
- {
- MenuButtonContextMenu.Closed += (s, e) =>
- {
- // 菜单关闭时的处理
- };
- }
-
- // 初始化侧边栏项目
- SidebarItemsControl.ItemsSource = SidebarItems;
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "启动时行为",
- Name = "StartupItem",
- IconSource = FindResource("StartupIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "画板和墨迹",
- Name = "CanvasAndInkItem",
- IconSource = FindResource("CanvasAndInkIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "手势操作",
- Name = "GesturesItem",
- IconSource = FindResource("GesturesIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "墨迹纠正",
- Name = "InkRecognitionItem",
- IconSource = FindResource("InkRecognitionIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Separator
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "个性化设置",
- Name = "ThemeItem",
- IconSource = FindResource("AppearanceIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "快捷键设置",
- Name = "ShortcutsItem",
- IconSource = FindResource("ShortcutsIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "崩溃处理",
- Name = "CrashActionItem",
- IconSource = FindResource("CrashActionIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Separator
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "PowerPoint 支持",
- Name = "PowerPointItem",
- IconSource = FindResource("PowerPointIcon") as DrawingImage,
- Selected = false,
- });
-
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "自动化行为",
- Name = "AutomationItem",
- IconSource = FindResource("AutomationIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "随机点名",
- Name = "LuckyRandomItem",
- IconSource = FindResource("LuckyRandomIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Separator
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "高级选项",
- Name = "AdvancedItem",
- IconSource = FindResource("AdvancedIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "截图和屏幕捕捉",
- Name = "SnapshotItem",
- IconSource = FindResource("SnapshotIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Separator
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "安全",
- Name = "SecurityItem",
- IconSource = FindResource("SecurityIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "更新中心",
- Name = "UpdateCenterItem",
- IconSource = FindResource("UpdateCenterIcon") as DrawingImage,
- Selected = false,
- });
- SidebarItems.Add(new SidebarItem()
- {
- Type = SidebarItemType.Item,
- Title = "关于 InkCanvasForClass",
- Name = "AboutItem",
- IconSource = FindResource("AboutIcon") as DrawingImage,
- Selected = false,
- });
- SettingsPanes = new Grid[] {
- SecurityPane,
- UpdateCenterPane,
- AboutPane,
- CanvasAndInkPane,
- GesturesPane,
- StartupPane,
- ThemePane,
- ShortcutsPane,
- CrashActionPane,
- InkRecognitionPane,
- AutomationPane,
- PowerPointPane,
- LuckyRandomPane,
- AdvancedPane,
- SnapshotPane
- };
-
- SettingsPaneScrollViewers = new ScrollViewer[] {
- SecurityPanel.ScrollViewerEx,
- UpdateCenterPanel.UpdateCenterScrollViewerEx,
- SettingsAboutPanel.AboutScrollViewerEx,
- CanvasAndInkPanel.ScrollViewerEx,
- GesturesPanel.ScrollViewerEx,
- StartupPanel.ScrollViewerEx,
- ThemePanel.ScrollViewerEx,
- ShortcutsPanel.ScrollViewerEx,
- CrashActionPanel.ScrollViewerEx,
- InkRecognitionPanel.ScrollViewerEx,
- AutomationPanel.ScrollViewerEx,
- PowerPointPanel.ScrollViewerEx,
- LuckyRandomPanel.ScrollViewerEx,
- AdvancedPanel.ScrollViewerEx,
- SnapshotPanel.ScrollViewerEx
- };
-
- SettingsPaneTitles = new string[] {
- "安全",
- "更新中心",
- "关于",
- "画板和墨迹",
- "手势操作",
- "启动时行为",
- "个性化设置",
- "快捷键设置",
- "崩溃处理",
- "墨迹识别",
- "自动化",
- "PowerPoint",
- "幸运随机",
- "高级",
- "截图"
- };
-
- SettingsPaneNames = new string[] {
- "SecurityItem",
- "UpdateCenterItem",
- "AboutItem",
- "CanvasAndInkItem",
- "GesturesItem",
- "StartupItem",
- "ThemeItem",
- "ShortcutsItem",
- "CrashActionItem",
- "InkRecognitionItem",
- "AutomationItem",
- "PowerPointItem",
- "LuckyRandomItem",
- "AdvancedItem",
- "SnapshotItem"
- };
-
- SettingsAboutPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- SettingsAboutPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
-
- // 订阅所有UserControl的滚动事件
- CanvasAndInkPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- CanvasAndInkPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- GesturesPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- GesturesPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- StartupPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- StartupPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- InkRecognitionPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- InkRecognitionPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- AutomationPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- AutomationPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- PowerPointPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- PowerPointPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- ThemePanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- ThemePanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
-
- // 监听主题变化
- ThemePanel.ThemeChanged += (o, s) =>
- {
- ApplyTheme();
- ApplyThemeToAllPanels();
- };
- ShortcutsPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- ShortcutsPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- CrashActionPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- CrashActionPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- LuckyRandomPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- LuckyRandomPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- AdvancedPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- AdvancedPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- SnapshotPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- SnapshotPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- SecurityPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- SecurityPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
- UpdateCenterPanel.IsTopBarNeedShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0.25;
- UpdateCenterPanel.IsTopBarNeedNoShadowEffect += (o, s) => DropShadowEffectTopBar.Opacity = 0;
-
- _selectedSidebarItemName = "StartupItem";
-
- // 初始化侧边栏项目的主题状态
- bool isDarkTheme = MainWindow.Settings?.Appearance != null &&
- (MainWindow.Settings.Appearance.Theme == 1 ||
- (MainWindow.Settings.Appearance.Theme == 2 && !IsSystemThemeLight()));
- foreach (var item in SidebarItems)
- {
- item.IsDarkTheme = isDarkTheme;
- }
-
- UpdateSidebarItemsSelection();
+ // 初始化各个组件
+ InitializeSearchPanelEvents();
+ InitializeMenuEvents();
+ InitializeSidebarItems();
+ SubscribePanelEvents();
+ InitializeThemeState();
// 为自定义滑块控件添加触摸支持
AddTouchSupportToCustomSliders();
@@ -946,10 +676,319 @@ namespace Ink_Canvas.Windows
public string _selectedSidebarItemName = "";
public ObservableCollection SidebarItems = new ObservableCollection();
- public Grid[] SettingsPanes;
- public ScrollViewer[] SettingsPaneScrollViewers;
- public string[] SettingsPaneTitles;
- public string[] SettingsPaneNames;
+ ///
+ /// 面板配置类,统一管理面板的配置信息
+ ///
+ public class PanelConfiguration
+ {
+ public string Title { get; set; }
+ public string Name { get; set; }
+ public string IconResourceKey { get; set; }
+ public Grid Panel { get; set; }
+ public ScrollViewer ScrollViewer { get; set; }
+ public UserControl UserControl { get; set; }
+ }
+
+ ///
+ /// 面板配置列表
+ ///
+ private List _panelConfigurations;
+
+ ///
+ /// 初始化侧边栏项
+ ///
+ private void InitializeSidebarItems()
+ {
+ // 初始化面板配置
+ _panelConfigurations = new List
+ {
+ new PanelConfiguration
+ {
+ Title = "启动时行为",
+ Name = "StartupItem",
+ IconResourceKey = "StartupIcon",
+ Panel = StartupPane,
+ ScrollViewer = StartupPanel.ScrollViewerEx,
+ UserControl = StartupPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "画板和墨迹",
+ Name = "CanvasAndInkItem",
+ IconResourceKey = "CanvasAndInkIcon",
+ Panel = CanvasAndInkPane,
+ ScrollViewer = CanvasAndInkPanel.ScrollViewerEx,
+ UserControl = CanvasAndInkPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "手势操作",
+ Name = "GesturesItem",
+ IconResourceKey = "GesturesIcon",
+ Panel = GesturesPane,
+ ScrollViewer = GesturesPanel.ScrollViewerEx,
+ UserControl = GesturesPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "墨迹纠正",
+ Name = "InkRecognitionItem",
+ IconResourceKey = "InkRecognitionIcon",
+ Panel = InkRecognitionPane,
+ ScrollViewer = InkRecognitionPanel.ScrollViewerEx,
+ UserControl = InkRecognitionPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "个性化设置",
+ Name = "ThemeItem",
+ IconResourceKey = "AppearanceIcon",
+ Panel = ThemePane,
+ ScrollViewer = ThemePanel.ScrollViewerEx,
+ UserControl = ThemePanel
+ },
+ new PanelConfiguration
+ {
+ Title = "快捷键设置",
+ Name = "ShortcutsItem",
+ IconResourceKey = "ShortcutsIcon",
+ Panel = ShortcutsPane,
+ ScrollViewer = ShortcutsPanel.ScrollViewerEx,
+ UserControl = ShortcutsPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "崩溃处理",
+ Name = "CrashActionItem",
+ IconResourceKey = "CrashActionIcon",
+ Panel = CrashActionPane,
+ ScrollViewer = CrashActionPanel.ScrollViewerEx,
+ UserControl = CrashActionPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "PowerPoint 支持",
+ Name = "PowerPointItem",
+ IconResourceKey = "PowerPointIcon",
+ Panel = PowerPointPane,
+ ScrollViewer = PowerPointPanel.ScrollViewerEx,
+ UserControl = PowerPointPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "自动化行为",
+ Name = "AutomationItem",
+ IconResourceKey = "AutomationIcon",
+ Panel = AutomationPane,
+ ScrollViewer = AutomationPanel.ScrollViewerEx,
+ UserControl = AutomationPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "随机点名",
+ Name = "LuckyRandomItem",
+ IconResourceKey = "LuckyRandomIcon",
+ Panel = LuckyRandomPane,
+ ScrollViewer = LuckyRandomPanel.ScrollViewerEx,
+ UserControl = LuckyRandomPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "高级选项",
+ Name = "AdvancedItem",
+ IconResourceKey = "AdvancedIcon",
+ Panel = AdvancedPane,
+ ScrollViewer = AdvancedPanel.ScrollViewerEx,
+ UserControl = AdvancedPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "截图和屏幕捕捉",
+ Name = "SnapshotItem",
+ IconResourceKey = "SnapshotIcon",
+ Panel = SnapshotPane,
+ ScrollViewer = SnapshotPanel.ScrollViewerEx,
+ UserControl = SnapshotPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "安全",
+ Name = "SecurityItem",
+ IconResourceKey = "SecurityIcon",
+ Panel = SecurityPane,
+ ScrollViewer = SecurityPanel.ScrollViewerEx,
+ UserControl = SecurityPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "更新中心",
+ Name = "UpdateCenterItem",
+ IconResourceKey = "UpdateCenterIcon",
+ Panel = UpdateCenterPane,
+ ScrollViewer = UpdateCenterPanel.UpdateCenterScrollViewerEx,
+ UserControl = UpdateCenterPanel
+ },
+ new PanelConfiguration
+ {
+ Title = "关于 InkCanvasForClass",
+ Name = "AboutItem",
+ IconResourceKey = "AboutIcon",
+ Panel = AboutPane,
+ ScrollViewer = SettingsAboutPanel.AboutScrollViewerEx,
+ UserControl = SettingsAboutPanel
+ }
+ };
+
+ SidebarItemsControl.ItemsSource = SidebarItems;
+
+ // 创建侧边栏项
+ foreach (var config in _panelConfigurations)
+ {
+ SidebarItems.Add(new SidebarItem
+ {
+ Type = SidebarItemType.Item,
+ Title = config.Title,
+ Name = config.Name,
+ IconSource = FindResource(config.IconResourceKey) as DrawingImage,
+ Selected = false
+ });
+ }
+
+ // 添加分隔符
+ AddSidebarSeparator(4); // 在第 4 个项后添加
+ AddSidebarSeparator(7); // 在第 7 个项后添加
+ AddSidebarSeparator(11); // 在第 11 个项后添加
+ AddSidebarSeparator(14); // 在第 14 个项后添加
+ AddSidebarSeparator(16); // 在第 16 个项后添加
+ }
+
+ ///
+ /// 在指定位置添加侧边栏分隔符
+ ///
+ /// 添加位置
+ private void AddSidebarSeparator(int index)
+ {
+ if (index >= 0 && index <= SidebarItems.Count)
+ {
+ SidebarItems.Insert(index, new SidebarItem
+ {
+ Type = SidebarItemType.Separator
+ });
+ }
+ }
+
+ ///
+ /// 订阅面板事件
+ ///
+ private void SubscribePanelEvents()
+ {
+ // 订阅所有面板的滚动和阴影事件
+ foreach (var config in _panelConfigurations)
+ {
+ if (config.UserControl != null)
+ {
+ // 检查 UserControl 是否有这些事件
+ var type = config.UserControl.GetType();
+ var shadowEvent = type.GetEvent("IsTopBarNeedShadowEffect");
+ var noShadowEvent = type.GetEvent("IsTopBarNeedNoShadowEffect");
+
+ if (shadowEvent != null)
+ {
+ // 创建与事件类型匹配的委托
+ var eventHandlerType = shadowEvent.EventHandlerType;
+ var handlerMethod = GetType().GetMethod("HandleShadowEffect",
+ System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ if (handlerMethod != null)
+ {
+ var handler = System.Delegate.CreateDelegate(eventHandlerType, this, handlerMethod);
+ shadowEvent.AddEventHandler(config.UserControl, handler);
+ }
+ }
+
+ if (noShadowEvent != null)
+ {
+ // 创建与事件类型匹配的委托
+ var eventHandlerType = noShadowEvent.EventHandlerType;
+ var handlerMethod = GetType().GetMethod("HandleNoShadowEffect",
+ System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ if (handlerMethod != null)
+ {
+ var handler = System.Delegate.CreateDelegate(eventHandlerType, this, handlerMethod);
+ noShadowEvent.AddEventHandler(config.UserControl, handler);
+ }
+ }
+ }
+ }
+
+ // 订阅主题变化事件
+ if (ThemePanel != null)
+ {
+ ThemePanel.ThemeChanged += (o, s) =>
+ {
+ ApplyTheme();
+ ApplyThemeToAllPanels();
+ };
+ }
+ }
+
+ ///
+ /// 处理阴影效果事件
+ ///
+ private void HandleShadowEffect(object sender, EventArgs e)
+ {
+ DropShadowEffectTopBar.Opacity = 0.25;
+ }
+
+ ///
+ /// 处理无阴影效果事件
+ ///
+ private void HandleNoShadowEffect(object sender, EventArgs e)
+ {
+ DropShadowEffectTopBar.Opacity = 0;
+ }
+
+ ///
+ /// 初始化搜索面板事件
+ ///
+ private void InitializeSearchPanelEvents()
+ {
+ SearchPanelControl.NavigateToItem += SearchPanel_NavigateToItem;
+ SearchPanelControl.CloseSearch += SearchPanel_CloseSearch;
+ }
+
+ ///
+ /// 初始化菜单事件
+ ///
+ private void InitializeMenuEvents()
+ {
+ // 订阅菜单关闭事件,确保状态同步
+ if (MenuButtonContextMenu != null)
+ {
+ MenuButtonContextMenu.Closed += (s, e) =>
+ {
+ // 菜单关闭时的处理
+ };
+ }
+ }
+
+ ///
+ /// 初始化主题状态
+ ///
+ private void InitializeThemeState()
+ {
+ // 初始化侧边栏项目的主题状态
+ bool isDarkTheme = MainWindow.Settings?.Appearance != null &&
+ (MainWindow.Settings.Appearance.Theme == 1 ||
+ (MainWindow.Settings.Appearance.Theme == 2 && !IsSystemThemeLight()));
+ foreach (var item in SidebarItems)
+ {
+ item.IsDarkTheme = isDarkTheme;
+ }
+
+ UpdateSidebarItemsSelection();
+ }
+
+
///
/// 根据当前选中的侧边栏项更新侧边栏条目状态、面板可见性与主题并将视图滚动到顶部。
@@ -963,13 +1002,10 @@ namespace Ink_Canvas.Windows
///
public void UpdateSidebarItemsSelection()
{
+ // 更新侧边栏项的选中状态
foreach (var si in SidebarItems)
{
si.Selected = si.Name == _selectedSidebarItemName;
- if (si.Selected && SettingsWindowTitle != null)
- {
- SettingsWindowTitle.Text = si.Title;
- }
}
CollectionViewSource.GetDefaultView(SidebarItems).Refresh();
@@ -982,78 +1018,55 @@ namespace Ink_Canvas.Windows
si.IsDarkTheme = isDarkTheme;
}
- // 定义面板映射
- var panelMappings = new Dictionary
+ // 切换面板可见性并获取选中的面板
+ UserControl selectedPanel = null;
+ if (_panelConfigurations != null)
{
- { "AboutItem", SettingsAboutPanel },
- { "CanvasAndInkItem", CanvasAndInkPanel },
- { "GesturesItem", GesturesPanel },
- { "StartupItem", StartupPanel },
- { "ThemeItem", ThemePanel },
- { "ShortcutsItem", ShortcutsPanel },
- { "CrashActionItem", CrashActionPanel },
- { "InkRecognitionItem", InkRecognitionPanel },
- { "AutomationItem", AutomationPanel },
- { "PowerPointItem", PowerPointPanel },
- { "LuckyRandomItem", LuckyRandomPanel },
- { "AdvancedItem", AdvancedPanel },
- { "SnapshotItem", SnapshotPanel },
- { "SecurityItem", SecurityPanel },
- { "UpdateCenterItem", UpdateCenterPanel },
- { "AppearanceItem", AppearancePanel }
- };
-
- // 设置面板可见性并应用主题
- if (AboutPane != null) AboutPane.Visibility = _selectedSidebarItemName == "AboutItem" ? Visibility.Visible : Visibility.Collapsed;
- if (CanvasAndInkPane != null) CanvasAndInkPane.Visibility = _selectedSidebarItemName == "CanvasAndInkItem" ? Visibility.Visible : Visibility.Collapsed;
- if (GesturesPane != null) GesturesPane.Visibility = _selectedSidebarItemName == "GesturesItem" ? Visibility.Visible : Visibility.Collapsed;
- if (StartupPane != null) StartupPane.Visibility = _selectedSidebarItemName == "StartupItem" ? Visibility.Visible : Visibility.Collapsed;
- if (ThemePane != null) ThemePane.Visibility = _selectedSidebarItemName == "ThemeItem" ? Visibility.Visible : Visibility.Collapsed;
- if (ShortcutsPane != null) ShortcutsPane.Visibility = _selectedSidebarItemName == "ShortcutsItem" ? Visibility.Visible : Visibility.Collapsed;
- if (CrashActionPane != null) CrashActionPane.Visibility = _selectedSidebarItemName == "CrashActionItem" ? Visibility.Visible : Visibility.Collapsed;
- if (InkRecognitionPane != null) InkRecognitionPane.Visibility = _selectedSidebarItemName == "InkRecognitionItem" ? Visibility.Visible : Visibility.Collapsed;
- if (AutomationPane != null) AutomationPane.Visibility = _selectedSidebarItemName == "AutomationItem" ? Visibility.Visible : Visibility.Collapsed;
- if (PowerPointPane != null) PowerPointPane.Visibility = _selectedSidebarItemName == "PowerPointItem" ? Visibility.Visible : Visibility.Collapsed;
- if (LuckyRandomPane != null) LuckyRandomPane.Visibility = _selectedSidebarItemName == "LuckyRandomItem" ? Visibility.Visible : Visibility.Collapsed;
- if (AdvancedPane != null) AdvancedPane.Visibility = _selectedSidebarItemName == "AdvancedItem" ? Visibility.Visible : Visibility.Collapsed;
- if (SnapshotPane != null) SnapshotPane.Visibility = _selectedSidebarItemName == "SnapshotItem" ? Visibility.Visible : Visibility.Collapsed;
- if (SecurityPane != null) SecurityPane.Visibility = _selectedSidebarItemName == "SecurityItem" ? Visibility.Visible : Visibility.Collapsed;
- if (UpdateCenterPane != null) UpdateCenterPane.Visibility = _selectedSidebarItemName == "UpdateCenterItem" ? Visibility.Visible : Visibility.Collapsed;
-
- // 为新显示的面板应用主题(延迟执行,确保面板已完全显示)
- if (panelMappings.ContainsKey(_selectedSidebarItemName))
- {
- var selectedPanel = panelMappings[_selectedSidebarItemName];
- if (selectedPanel != null)
+ foreach (var config in _panelConfigurations)
{
- Dispatcher.BeginInvoke(new Action(() =>
+ // 更新窗口标题
+ if (config.Name == _selectedSidebarItemName && SettingsWindowTitle != null)
{
- try
- {
- var applyThemeMethod = selectedPanel.GetType().GetMethod("ApplyTheme",
- System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
- if (applyThemeMethod != null)
- {
- applyThemeMethod.Invoke(selectedPanel, null);
- }
- }
- catch (Exception ex)
- {
- System.Diagnostics.Debug.WriteLine($"切换面板时应用主题到 {selectedPanel.GetType().Name} 时出错: {ex.Message}");
- }
- }), System.Windows.Threading.DispatcherPriority.Loaded);
- }
- }
- if (SettingsPaneScrollViewers != null)
- {
- foreach (var sv in SettingsPaneScrollViewers)
- {
- if (sv != null)
+ SettingsWindowTitle.Text = config.Title;
+ selectedPanel = config.UserControl;
+ }
+
+ // 切换面板可见性
+ if (config.Panel != null)
{
- sv.ScrollToTop();
+ config.Panel.Visibility = config.Name == _selectedSidebarItemName
+ ? Visibility.Visible
+ : Visibility.Collapsed;
+ }
+
+ // 滚动到顶部
+ if (config.ScrollViewer != null)
+ {
+ config.ScrollViewer.ScrollToTop();
}
}
}
+
+ // 为新显示的面板应用主题(延迟执行,确保面板已完全显示)
+ if (selectedPanel != null)
+ {
+ Dispatcher.BeginInvoke(new Action(() =>
+ {
+ try
+ {
+ var applyThemeMethod = selectedPanel.GetType().GetMethod("ApplyTheme",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ if (applyThemeMethod != null)
+ {
+ applyThemeMethod.Invoke(selectedPanel, null);
+ }
+ }
+ catch (Exception ex)
+ {
+ System.Diagnostics.Debug.WriteLine($"切换面板时应用主题到 {selectedPanel.GetType().Name} 时出错: {ex.Message}");
+ }
+ }), System.Windows.Threading.DispatcherPriority.Loaded);
+ }
}
private void ScrollBar_Scroll(object sender, RoutedEventArgs e)