refactor(设置): 清理并重构设置页面代码

删除未使用的设置页面文件,包括外观、设计、字体、主题等页面
简化主页导航逻辑,移除动态生成导航项代码
更新导航菜单项图标和跳转逻辑
优化页面布局和代码结构
This commit is contained in:
PrefacedCorg
2026-04-25 11:32:50 +08:00
parent b9651240df
commit f789a919e1
24 changed files with 85 additions and 816 deletions
@@ -1,49 +0,0 @@
<Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.AppearancePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="外观">
<Grid Margin="24">
<StackPanel>
<TextBlock Text="外观设置" Style="{DynamicResource TitleTextBlockStyle}" Margin="0,0,0,16" />
<ui:SettingsCard
Header="主题"
Description="点击跳转到主题设置页面"
IsClickEnabled="True"
Click="SettingsCard_Click">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Color}"/>
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard
Header="颜色"
Description="点击跳转到颜色设置页面"
IsClickEnabled="True"
Click="SettingsCard_Click_1"
Margin="0,8,0,0">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Color}"/>
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard
Header="字体"
Description="点击跳转到字体设置页面"
IsClickEnabled="True"
Click="SettingsCard_Click_2"
Margin="0,8,0,0">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Font}"/>
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
</StackPanel>
</Grid>
</Page>
@@ -1,40 +0,0 @@
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class AppearancePage : Page
{
public AppearancePage()
{
InitializeComponent();
}
private void SettingsCard_Click(object sender, RoutedEventArgs e)
{
SettingsWindow settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow != null)
{
settingsWindow.NavigateToPage("ThemePage");
}
}
private void SettingsCard_Click_1(object sender, RoutedEventArgs e)
{
SettingsWindow settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow != null)
{
settingsWindow.NavigateToPage("ColorsPage");
}
}
private void SettingsCard_Click_2(object sender, RoutedEventArgs e)
{
SettingsWindow settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow != null)
{
settingsWindow.NavigateToPage("FontsPage");
}
}
}
}
@@ -1,58 +0,0 @@
<Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.BasicPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="基本">
<ScrollViewer Padding="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
<Style.Setters>
<Setter Property="Margin" Value="1,30,0,6" />
</Style.Setters>
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="800"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="基本设置" />
<ItemsControl x:Name="SubPageItems">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ikw:SimpleStackPanel Spacing="{StaticResource SettingsCardSpacing}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ui:SettingsCard
Header="{Binding Header}"
Description="{Binding Description}"
IsClickEnabled="True"
Click="SubPageCard_Click"
Tag="{Binding PageTag}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Glyph="{Binding IconGlyph}" FontFamily="{Binding IconFontFamily}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ikw:SimpleStackPanel>
</Grid>
</ScrollViewer>
</Page>
@@ -1,125 +0,0 @@
using iNKORE.UI.WPF.Modern.Common.IconKeys;
using iNKORE.UI.WPF.Modern.Controls;
using System.Collections.ObjectModel;
using System.Reflection;
using System.Windows;
using System.Windows.Media;
using SWC = System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public class SubPageNavItem
{
public string Header { get; set; }
public string Description { get; set; }
public string PageTag { get; set; }
public string IconGlyph { get; set; }
public FontFamily IconFontFamily { get; set; }
}
public partial class BasicPage : SWC.Page
{
private readonly ObservableCollection<SubPageNavItem> _subPageItems = new();
public BasicPage()
{
InitializeComponent();
SubPageItems.ItemsSource = _subPageItems;
Loaded += BasicPage_Loaded;
}
private void BasicPage_Loaded(object sender, RoutedEventArgs e)
{
LoadSubPages();
}
private void LoadSubPages()
{
_subPageItems.Clear();
var settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow == null) return;
var navView = settingsWindow.GetNavigationView();
if (navView == null) return;
foreach (var item in navView.MenuItems)
{
if (item is NavigationViewItem navItem)
{
string tag = navItem.Tag as string;
if (tag == "BasicPage" && navItem.MenuItems.Count > 0)
{
foreach (var child in navItem.MenuItems)
{
if (child is NavigationViewItem childItem)
{
string childTag = childItem.Tag as string;
if (!string.IsNullOrEmpty(childTag))
{
(string glyph, FontFamily fontFamily) = ExtractIconInfo(childItem);
string description = SWC.ToolTipService.GetToolTip(childItem) as string
?? $"点击跳转到{childItem.Content}";
_subPageItems.Add(new SubPageNavItem
{
Header = childItem.Content?.ToString() ?? "",
Description = description,
PageTag = childTag,
IconGlyph = glyph,
IconFontFamily = fontFamily
});
}
}
}
break;
}
}
}
}
private (string glyph, FontFamily fontFamily) ExtractIconInfo(NavigationViewItem navItem)
{
if (navItem.Icon is FontIcon fontIcon)
{
string glyph = fontIcon.Glyph ?? "\uE713";
FontFamily fontFamily = fontIcon.FontFamily ?? new FontFamily("Segoe Fluent Icons");
if (fontIcon.Icon != null)
{
string iconStr = fontIcon.Icon.ToString();
if (iconStr.Contains("_20_"))
{
string key24 = iconStr.Replace("_20_", "_24_");
var field = typeof(FluentSystemIcons).GetField(key24, BindingFlags.Public | BindingFlags.Static);
if (field != null)
{
var value = field.GetValue(null);
if (value is FontIconData data24)
{
glyph = data24.Glyph ?? glyph;
fontFamily = data24.FontFamily ?? fontFamily;
}
}
}
}
return (glyph, fontFamily);
}
if (navItem.Icon is SymbolIcon symbolIcon)
return (char.ConvertFromUtf32((int)symbolIcon.Symbol), new FontFamily("Segoe Fluent Icons"));
return ("\uE713", new FontFamily("Segoe Fluent Icons"));
}
private void SubPageCard_Click(object sender, RoutedEventArgs e)
{
if (sender is FrameworkElement element && element.Tag is string pageTag)
{
var settingsWindow = Window.GetWindow(this) as SettingsWindow;
settingsWindow?.NavigateToPage(pageTag);
}
}
}
}
@@ -11,9 +11,7 @@
xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls"
xmlns:c="clr-namespace:Ink_Canvas.Converter"
mc:Ignorable="d"
Title="画板">
<ScrollViewer PanningMode="VerticalFirst">
<Grid Margin="59,0,59,0">
<FrameworkElement.Resources>
@@ -28,8 +26,7 @@
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="1000"
HorizontalAlignment="Stretch"
<ikw:SimpleStackPanel MaxWidth="1000" HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
@@ -1,17 +0,0 @@
<ui:Page
x:Class="Ink_Canvas.Windows.SettingsViews.Pages.ColorsPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
Title="颜色设置"
mc:Ignorable="d">
<Grid>
<StackPanel Margin="24">
<TextBlock Text="颜色设置" Style="{DynamicResource TitleTextBlockStyle}" Margin="0,0,0,16" />
<TextBlock Text="这里是颜色设置页面" Style="{DynamicResource BodyTextBlockStyle}" />
</StackPanel>
</Grid>
</ui:Page>
@@ -1,12 +0,0 @@
using iNKORE.UI.WPF.Modern.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class ColorsPage : Page
{
public ColorsPage()
{
InitializeComponent();
}
}
}
@@ -1,38 +0,0 @@
<Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.DesignPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="设计">
<Grid Margin="24">
<StackPanel>
<TextBlock Text="设计设置" Style="{DynamicResource TitleTextBlockStyle}" Margin="0,0,0,16" />
<ui:SettingsCard
Header="图标"
Description="点击跳转到图标设置页面"
IsClickEnabled="True"
Click="SettingsCard_Click">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Home}"/>
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard
Header="排版"
Description="点击跳转到排版设置页面"
IsClickEnabled="True"
Click="SettingsCard_Click_1"
Margin="0,8,0,0">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Font}"/>
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
</StackPanel>
</Grid>
</Page>
@@ -1,31 +0,0 @@
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class DesignPage : Page
{
public DesignPage()
{
InitializeComponent();
}
private void SettingsCard_Click(object sender, RoutedEventArgs e)
{
SettingsWindow settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow != null)
{
settingsWindow.NavigateToPage("IconographyPage");
}
}
private void SettingsCard_Click_1(object sender, RoutedEventArgs e)
{
SettingsWindow settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow != null)
{
settingsWindow.NavigateToPage("TypographyPage");
}
}
}
}
@@ -1,17 +0,0 @@
<ui:Page
x:Class="Ink_Canvas.Windows.SettingsViews.Pages.FontsPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
Title="字体设置"
mc:Ignorable="d">
<Grid>
<StackPanel Margin="24">
<TextBlock Text="字体设置" Style="{DynamicResource TitleTextBlockStyle}" Margin="0,0,0,16" />
<TextBlock Text="这里是字体设置页面" Style="{DynamicResource BodyTextBlockStyle}" />
</StackPanel>
</Grid>
</ui:Page>
@@ -1,12 +0,0 @@
using iNKORE.UI.WPF.Modern.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class FontsPage : Page
{
public FontsPage()
{
InitializeComponent();
}
}
}
@@ -1,57 +1,90 @@
<Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.HomePage"
<ui:Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.HomePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
mc:Ignorable="d"
Title="首页">
<ScrollViewer Padding="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
<Style.Setters>
<Setter Property="Margin" Value="1,30,0,6" />
</Style.Setters>
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="800"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="快速导航" />
<ScrollViewer PanningMode="VerticalFirst">
<Grid Margin="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
<Style.Setters>
<Setter Property="Margin" Value="1,30,0,6" />
</Style.Setters>
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="1000"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<ItemsControl x:Name="QuickNavItems">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ikw:SimpleStackPanel Spacing="{StaticResource SettingsCardSpacing}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ui:SettingsCard
Header="{Binding Header}"
Description="{Binding Description}"
IsClickEnabled="True"
Click="QuickNavCard_Click"
Tag="{Binding PageTag}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Glyph="{Binding IconGlyph}" FontFamily="{Binding IconFontFamily}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ikw:SimpleStackPanel>
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="快速导航" />
<ui:SettingsCard Header="启动" Description="启动设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="StartupPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Play}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="隐私" Description="隐私与遥测设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="PrivacyPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Shield}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="窗口" Description="窗口设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="WindowPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Pinned}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="更新" Description="更新设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="UpdatePage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Sync}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="实验性选项" Description="实验性选项"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="ExperimentalPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.DeveloperTools}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="画板" Description="画板与墨迹设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="CanvasPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="关于" Description="关于 InkCanvasForClass"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="AboutPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Info}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<Rectangle Height="48" />
</ikw:SimpleStackPanel>
</Grid>
</Grid>
</ScrollViewer>
</Page>
</ui:Page>
@@ -1,111 +1,12 @@
using iNKORE.UI.WPF.Modern.Common.IconKeys;
using iNKORE.UI.WPF.Modern.Controls;
using System.Collections.ObjectModel;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public class QuickNavItem
{
public string Header { get; set; }
public string Description { get; set; }
public string PageTag { get; set; }
public string IconGlyph { get; set; }
public FontFamily IconFontFamily { get; set; }
}
public partial class HomePage
{
private readonly ObservableCollection<QuickNavItem> _navItems = new();
public HomePage()
{
InitializeComponent();
QuickNavItems.ItemsSource = _navItems;
Loaded += HomePage_Loaded;
}
private void HomePage_Loaded(object sender, RoutedEventArgs e)
{
LoadNavigationItems();
}
private void LoadNavigationItems()
{
_navItems.Clear();
var settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow == null) return;
var navView = settingsWindow.GetNavigationView();
if (navView == null) return;
CollectNavItems(navView.MenuItems);
CollectNavItems(navView.FooterMenuItems);
}
private void CollectNavItems(System.Collections.IEnumerable items)
{
foreach (var item in items)
{
if (item is NavigationViewItem navItem)
{
string tag = navItem.Tag as string;
if (!string.IsNullOrEmpty(tag) && tag != "HomePage")
{
(string glyph, FontFamily fontFamily) = ExtractIconInfo(navItem);
string description = ToolTipService.GetToolTip(navItem) as string
?? $"点击跳转到{navItem.Content}";
_navItems.Add(new QuickNavItem
{
Header = navItem.Content?.ToString() ?? "",
Description = description,
PageTag = tag,
IconGlyph = glyph,
IconFontFamily = fontFamily
});
}
}
}
}
private (string glyph, FontFamily fontFamily) ExtractIconInfo(NavigationViewItem navItem)
{
if (navItem.Icon is FontIcon fontIcon)
{
string glyph = fontIcon.Glyph ?? "\uE713";
FontFamily fontFamily = fontIcon.FontFamily ?? new FontFamily("Segoe Fluent Icons");
if (fontIcon.Icon != null)
{
string iconStr = fontIcon.Icon.ToString();
if (iconStr.Contains("_20_"))
{
string key24 = iconStr.Replace("_20_", "_24_");
var field = typeof(FluentSystemIcons).GetField(key24, BindingFlags.Public | BindingFlags.Static);
if (field != null)
{
var value = field.GetValue(null);
if (value is FontIconData data24)
{
glyph = data24.Glyph ?? glyph;
fontFamily = data24.FontFamily ?? fontFamily;
}
}
}
}
return (glyph, fontFamily);
}
if (navItem.Icon is SymbolIcon symbolIcon)
return (char.ConvertFromUtf32((int)symbolIcon.Symbol), new FontFamily("Segoe Fluent Icons"));
return ("\uE713", new FontFamily("Segoe Fluent Icons"));
}
private void QuickNavCard_Click(object sender, RoutedEventArgs e)
@@ -1,58 +0,0 @@
<Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.MainInterfacePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="主界面">
<ScrollViewer Padding="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
<Style.Setters>
<Setter Property="Margin" Value="1,30,0,6" />
</Style.Setters>
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="800"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="主界面" />
<ItemsControl x:Name="SubPageItems">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<ikw:SimpleStackPanel Spacing="{StaticResource SettingsCardSpacing}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ui:SettingsCard
Header="{Binding Header}"
Description="{Binding Description}"
IsClickEnabled="True"
Click="SubPageCard_Click"
Tag="{Binding PageTag}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Glyph="{Binding IconGlyph}" FontFamily="{Binding IconFontFamily}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ikw:SimpleStackPanel>
</Grid>
</ScrollViewer>
</Page>
@@ -1,116 +0,0 @@
using iNKORE.UI.WPF.Modern.Common.IconKeys;
using iNKORE.UI.WPF.Modern.Controls;
using System.Collections.ObjectModel;
using System.Reflection;
using System.Windows;
using System.Windows.Media;
using SWC = System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class MainInterfacePage : SWC.Page
{
private readonly ObservableCollection<SubPageNavItem> _subPageItems = new();
public MainInterfacePage()
{
InitializeComponent();
SubPageItems.ItemsSource = _subPageItems;
Loaded += MainInterfacePage_Loaded;
}
private void MainInterfacePage_Loaded(object sender, RoutedEventArgs e)
{
LoadSubPages();
}
private void LoadSubPages()
{
_subPageItems.Clear();
var settingsWindow = Window.GetWindow(this) as SettingsWindow;
if (settingsWindow == null) return;
var navView = settingsWindow.GetNavigationView();
if (navView == null) return;
foreach (var item in navView.MenuItems)
{
if (item is NavigationViewItem navItem)
{
string tag = navItem.Tag as string;
if (tag == "MainInterfacePage" && navItem.MenuItems.Count > 0)
{
foreach (var child in navItem.MenuItems)
{
if (child is NavigationViewItem childItem)
{
string childTag = childItem.Tag as string;
if (!string.IsNullOrEmpty(childTag))
{
(string glyph, FontFamily fontFamily) = ExtractIconInfo(childItem);
string description = SWC.ToolTipService.GetToolTip(childItem) as string
?? $"点击跳转到{childItem.Content}";
_subPageItems.Add(new SubPageNavItem
{
Header = childItem.Content?.ToString() ?? "",
Description = description,
PageTag = childTag,
IconGlyph = glyph,
IconFontFamily = fontFamily
});
}
}
}
break;
}
}
}
}
private (string glyph, FontFamily fontFamily) ExtractIconInfo(NavigationViewItem navItem)
{
if (navItem.Icon is FontIcon fontIcon)
{
string glyph = fontIcon.Glyph ?? "\uE737";
FontFamily fontFamily = fontIcon.FontFamily ?? new FontFamily("Segoe Fluent Icons");
if (fontIcon.Icon != null)
{
string iconStr = fontIcon.Icon.ToString();
if (iconStr.Contains("_20_"))
{
string key24 = iconStr.Replace("_20_", "_24_");
var field = typeof(FluentSystemIcons).GetField(key24, BindingFlags.Public | BindingFlags.Static);
if (field != null)
{
var value = field.GetValue(null);
if (value is FontIconData data24)
{
glyph = data24.Glyph ?? glyph;
fontFamily = data24.FontFamily ?? fontFamily;
}
}
}
}
return (glyph, fontFamily);
}
if (navItem.Icon is SymbolIcon symbolIcon)
return (char.ConvertFromUtf32((int)symbolIcon.Symbol), new FontFamily("Segoe Fluent Icons"));
return ("\uE737", new FontFamily("Segoe Fluent Icons"));
}
private void SubPageCard_Click(object sender, RoutedEventArgs e)
{
if (sender is FrameworkElement element && element.Tag is string pageTag)
{
var settingsWindow = Window.GetWindow(this) as SettingsWindow;
settingsWindow?.NavigateToPage(pageTag);
}
}
}
}
@@ -1,14 +0,0 @@
<Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.Page2Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="Page2">
<Grid>
</Grid>
</Page>
@@ -1,15 +0,0 @@
using System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
/// <summary>
/// Page2.xaml 的交互逻辑
/// </summary>
public partial class Page2Page : Page
{
public Page2Page()
{
InitializeComponent();
}
}
}
@@ -54,7 +54,7 @@
<controls:LabeledSettingsCard x:Name="CardExternalProtocol"
Header="{i18n:I18n Key=Startup_ExternalProtocol}"
Description="{i18n:I18n Key=Startup_ExternalProtocolHint}"
Icon="{x:Static ui:FluentSystemIcons.Link_20_Regular}"
Icon="{x:Static ui:SegoeFluentIcons.Link}"
SwitchName="ToggleSwitchExternalProtocol"
Toggled="ToggleSwitchExternalProtocol_Toggled" />
@@ -1,17 +0,0 @@
<ui:Page
x:Class="Ink_Canvas.Windows.SettingsViews.Pages.ThemePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
Title="主题设置"
mc:Ignorable="d">
<Grid>
<StackPanel Margin="24">
<TextBlock Text="主题设置" Style="{DynamicResource TitleTextBlockStyle}" Margin="0,0,0,16" />
<TextBlock Text="这里是主题设置页面" Style="{DynamicResource BodyTextBlockStyle}" />
</StackPanel>
</Grid>
</ui:Page>
@@ -1,12 +0,0 @@
using iNKORE.UI.WPF.Modern.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class ThemePage : Page
{
public ThemePage()
{
InitializeComponent();
}
}
}
@@ -1,17 +0,0 @@
<ui:Page
x:Class="Ink_Canvas.Windows.SettingsViews.Pages.TypographyPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
Title="排版设置"
mc:Ignorable="d">
<Grid>
<StackPanel Margin="24">
<TextBlock Text="排版设置" Style="{DynamicResource TitleTextBlockStyle}" Margin="0,0,0,16" />
<TextBlock Text="这里是排版设置页面" Style="{DynamicResource BodyTextBlockStyle}" />
</StackPanel>
</Grid>
</ui:Page>
@@ -1,12 +0,0 @@
using iNKORE.UI.WPF.Modern.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class TypographyPage : Page
{
public TypographyPage()
{
InitializeComponent();
}
}
}
@@ -128,7 +128,7 @@
<ui:NavigationViewItem
x:Name="BasicItem"
Content="基本"
Tag="BasicPage"
Tag="StartupPage"
SelectsOnInvoked="True"
ToolTipService.ToolTip="基本设置">
<ui:NavigationViewItem.Icon>
@@ -160,10 +160,10 @@
<ui:NavigationViewItem
x:Name="MainInterfaceItem"
Content="主界面"
Tag="MainInterfacePage"
Tag="WindowPage"
ToolTipService.ToolTip="主界面设置">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:FluentSystemIcons.Desktop_20_Regular}" FontSize="20" Margin="-2"/>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.TVMonitor}"/>
</ui:NavigationViewItem.Icon>
<ui:NavigationViewItem.MenuItems>
<ui:NavigationViewItem
@@ -172,7 +172,7 @@
Tag="WindowPage"
ToolTipService.ToolTip="窗口设置">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:FluentSystemIcons.Window_20_Regular}" FontSize="20" Margin="-2"/>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Pinned}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
</ui:NavigationViewItem.MenuItems>
@@ -196,7 +196,7 @@
Tag="ExperimentalPage"
ToolTipService.ToolTip="实验性选项">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:FluentSystemIcons.Beaker_20_Regular}" FontSize="20" Margin="-2"/>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.DeveloperTools}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
@@ -37,10 +37,8 @@ namespace Ink_Canvas.Windows.SettingsViews
_pageTypes = new Dictionary<string, Type>
{
{ "HomePage", typeof(HomePage) },
{ "BasicPage", typeof(BasicPage) },
{ "StartupPage", typeof(StartupPage) },
{ "PrivacyPage", typeof(PrivacyPage) },
{ "MainInterfacePage", typeof(MainInterfacePage) },
{ "WindowPage", typeof(WindowPage) },
{ "UpdatePage", typeof(UpdatePage) },
{ "ExperimentalPage", typeof(ExperimentalPage) },