feat(设置): 新增墨迹纠正设置页面并重构设置界面

重构设置界面,将墨迹纠正相关功能从画板设置中分离出来,新增独立的墨迹纠正设置页面。主要变更包括:
- 新增 InkRecognitionPage 用于集中管理墨迹纠正功能
- 调整设置窗口导航结构,将墨迹纠正设为画板设置的子页面
- 优化设置项布局,使用折叠面板组织复杂选项
- 移除主窗口中冗余的崩溃处理和手势设置
- 修复多指手势时橡皮擦状态保存问题
- 新增笔尖模式相关字符串资源
This commit is contained in:
PrefacedCorg
2026-04-25 13:56:16 +08:00
parent 6e61538dec
commit b1640f44c2
17 changed files with 588 additions and 399 deletions
+1 -57
View File
@@ -640,63 +640,7 @@
Padding="15,5" Margin="0,10,0,0"/> Padding="15,5" Margin="0,10,0,0"/>
</ikw:SimpleStackPanel> </ikw:SimpleStackPanel>
</GroupBox> </GroupBox>
<GroupBox Name="GroupBoxStartup">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Startup_Start}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ikw:SimpleStackPanel Spacing="6">
<!--<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchAutoHideCanvas" Header="自动隐藏画板" Toggled="ToggleSwitchAutoHideCanvas_Toggled"/>
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchAutoEnterModeFinger" Header="自动进入手指模式" Toggled="ToggleSwitchAutoEnterModeFinger_Toggled"/>-->
</ikw:SimpleStackPanel>
</GroupBox>
<GroupBox Name="GroupBoxCrashAction">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Crash_Title}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ikw:SimpleStackPanel Spacing="6">
<TextBlock Text="{i18n:I18n Key=Crash_Desc}" Foreground="#a1a1aa" TextWrapping="Wrap" Width="420" />
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,4,0,0">
<RadioButton x:Name="RadioCrashSilentRestart" GroupName="CrashAction"
Content="{i18n:I18n Key=Crash_SilentRestart}" FontSize="14" Margin="0,0,24,0"
Checked="RadioCrashAction_Checked"/>
<RadioButton x:Name="RadioCrashNoAction" GroupName="CrashAction"
Content="{i18n:I18n Key=Crash_NoAction}" FontSize="14"
Checked="RadioCrashAction_Checked"/>
</StackPanel>
<TextBlock Text="{i18n:I18n Key=Crash_Hint}" Foreground="#a1a1aa" TextWrapping="Wrap" Width="420" />
</ikw:SimpleStackPanel>
</GroupBox>
<GroupBox Name="GroupBoxGesture">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Gesture_Title}" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ikw:SimpleStackPanel Spacing="6">
<controls:LabeledToggleSwitch x:Name="ToggleSwitchAutoSwitchTwoFingerGesture" Label="{i18n:I18n Key=Gesture_AutoToggleTwoFinger}" Hint="{i18n:I18n Key=Gesture_AutoToggleHint}" IsOn="True" Toggled="ToggleSwitchAutoSwitchTwoFingerGesture_Toggled"/>
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0" Stroke="#3f3f46"
StrokeThickness="1" Margin="0,4,0,4" />
<controls:LabeledToggleSwitch x:Name="ToggleSwitchEnableTwoFingerRotationOnSelection" Label="{i18n:I18n Key=Gesture_AllowRotateScale}" Hint="{i18n:I18n Key=Gesture_AllowRotateScaleHint}" IsOn="True" Toggled="ToggleSwitchEnableTwoFingerRotation_Toggled"/>
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0" Stroke="#3f3f46"
StrokeThickness="1" Margin="0,4,0,4" />
<controls:LabeledToggleSwitch x:Name="ToggleSwitchEnablePalmEraser" Label="{i18n:I18n Key=Gesture_EnablePalmEraser}" Hint="{i18n:I18n Key=Gesture_PalmHint}" IsOn="False" Toggled="ToggleSwitchEnablePalmEraser_Toggled"/>
<ikw:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left"
Visibility="{Binding ElementName=ToggleSwitchEnablePalmEraser, Path=IsOn, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock Foreground="#fafafa" Text="{i18n:I18n Key=Gesture_PalmSensitivity}" VerticalAlignment="Center"
FontSize="14" Margin="0,0,16,0" />
<ComboBox Name="ComboBoxPalmEraserSensitivity" SelectionChanged="ComboBoxPalmEraserSensitivity_SelectionChanged">
<ComboBoxItem Content="{i18n:I18n Key=Gesture_PalmSensitivityLow}" />
<ComboBoxItem Content="{i18n:I18n Key=Gesture_PalmSensitivityMedium}" />
<ComboBoxItem Content="{i18n:I18n Key=Gesture_PalmSensitivityHigh}" />
</ComboBox>
</ikw:SimpleStackPanel>
<TextBlock Text="{i18n:I18n Key=Gesture_PalmHint}"
TextWrapping="Wrap" Foreground="#a1a1aa"
Visibility="{Binding ElementName=ToggleSwitchEnablePalmEraser, Path=IsOn, Converter={StaticResource BooleanToVisibilityConverter}}" />
</ikw:SimpleStackPanel>
</GroupBox>
<GroupBox Name="GroupBoxAppearanceNewUI"> <GroupBox Name="GroupBoxAppearanceNewUI">
<GroupBox.Header> <GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Theme_GroupTitle}" FontWeight="Bold" Foreground="#fafafa" <TextBlock Margin="0,12,0,0" Text="{i18n:I18n Key=Theme_GroupTitle}" FontWeight="Bold" Foreground="#fafafa"
-30
View File
@@ -1336,12 +1336,6 @@ namespace Ink_Canvas
ScheduleStartupFoldAbsenceVerification(); ScheduleStartupFoldAbsenceVerification();
} }
// 恢复崩溃后操作设置
if (App.CrashAction == App.CrashActionType.SilentRestart)
RadioCrashSilentRestart.IsChecked = true;
else
RadioCrashNoAction.IsChecked = true;
// 显示快抽悬浮按钮 // 显示快抽悬浮按钮
ShowQuickDrawFloatingButton(); ShowQuickDrawFloatingButton();
@@ -2122,24 +2116,6 @@ namespace Ink_Canvas
} }
} }
// 新增:崩溃后操作设置按钮事件
private void RadioCrashAction_Checked(object sender, RoutedEventArgs e)
{
if (RadioCrashSilentRestart != null && RadioCrashSilentRestart.IsChecked == true)
{
App.CrashAction = App.CrashActionType.SilentRestart;
Settings.Startup.CrashAction = 0;
}
else if (RadioCrashNoAction != null && RadioCrashNoAction.IsChecked == true)
{
App.CrashAction = App.CrashActionType.NoAction;
Settings.Startup.CrashAction = 1;
}
SaveSettingsToFile();
// 强制同步全局变量,防止后台逻辑未及时感知
App.SyncCrashActionFromSettings();
}
// 添加一个辅助方法,根据当前编辑模式设置光标 // 添加一个辅助方法,根据当前编辑模式设置光标
public void SetCursorBasedOnEditingMode(InkCanvas canvas) public void SetCursorBasedOnEditingMode(InkCanvas canvas)
{ {
@@ -2434,13 +2410,7 @@ namespace Ink_Canvas
switch (sectionTag.ToLower()) switch (sectionTag.ToLower())
{ {
case "startup": case "startup":
targetGroupBox = GroupBoxStartup;
break;
case "gesture":
targetGroupBox = GroupBoxGesture;
break;
case "crashaction": case "crashaction":
targetGroupBox = GroupBoxCrashAction;
break; break;
case "ppt": case "ppt":
targetGroupBox = GroupBoxPPT; targetGroupBox = GroupBoxPPT;
@@ -3550,7 +3550,7 @@ namespace Ink_Canvas
SyncPdfPageSidebarWithCanvas(); SyncPdfPageSidebarWithCanvas();
} }
private int BoundsWidth = 5; internal int BoundsWidth = 5;
private void BtnHideInkCanvas_Click(object sender, RoutedEventArgs e) private void BtnHideInkCanvas_Click(object sender, RoutedEventArgs e)
{ {
+2 -37
View File
@@ -166,17 +166,6 @@ namespace Ink_Canvas
#region Startup #region Startup
/// <summary>
/// 处理笔尖模式开关状态更改事件
/// </summary>
/// <param name="sender">事件发送者</param>
/// <param name="e">路由事件参数</param>
/// <remarks>
/// 当笔尖模式开关状态更改时:
/// 1. 同步更新两个笔尖模式开关的状态
/// 2. 保存笔尖模式设置
/// 3. 根据笔尖模式设置更新边界宽度
/// </remarks>
private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e)
{ {
if (!isLoaded) return; if (!isLoaded) return;
@@ -2653,13 +2642,6 @@ namespace Ink_Canvas
SaveSettingsToFile(); SaveSettingsToFile();
} }
private void ToggleSwitchAutoSwitchTwoFingerGesture_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Gesture.AutoSwitchTwoFingerGesture = ToggleSwitchAutoSwitchTwoFingerGesture.IsOn;
SaveSettingsToFile();
}
private void ToggleSwitchEnableTwoFingerZoom_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitchEnableTwoFingerZoom_Toggled(object sender, RoutedEventArgs e)
{ {
if (!isLoaded) return; if (!isLoaded) return;
@@ -2718,8 +2700,7 @@ namespace Ink_Canvas
palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser; palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser;
Settings.Canvas.EnablePalmEraser = false; Settings.Canvas.EnablePalmEraser = false;
if (ToggleSwitchEnablePalmEraser != null) SaveSettingsToFile();
ToggleSwitchEnablePalmEraser.IsOn = false;
// 恢复到之前的编辑状态 // 恢复到之前的编辑状态
inkCanvas.EditingMode = currentEditingMode; inkCanvas.EditingMode = currentEditingMode;
@@ -2754,8 +2735,7 @@ namespace Ink_Canvas
if (palmEraserWasEnabledBeforeMultiTouch) if (palmEraserWasEnabledBeforeMultiTouch)
{ {
Settings.Canvas.EnablePalmEraser = true; Settings.Canvas.EnablePalmEraser = true;
if (ToggleSwitchEnablePalmEraser != null) SaveSettingsToFile();
ToggleSwitchEnablePalmEraser.IsOn = true;
} }
// 恢复到之前的编辑状态 // 恢复到之前的编辑状态
@@ -2840,7 +2820,6 @@ namespace Ink_Canvas
else else
ToggleSwitchEnableTwoFingerRotation.IsOn = BoardToggleSwitchEnableTwoFingerRotation.IsOn; ToggleSwitchEnableTwoFingerRotation.IsOn = BoardToggleSwitchEnableTwoFingerRotation.IsOn;
Settings.Gesture.IsEnableTwoFingerRotation = ToggleSwitchEnableTwoFingerRotation.IsOn; Settings.Gesture.IsEnableTwoFingerRotation = ToggleSwitchEnableTwoFingerRotation.IsOn;
Settings.Gesture.IsEnableTwoFingerRotationOnSelection = ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn;
CheckEnableTwoFingerGestureBtnColorPrompt(); CheckEnableTwoFingerGestureBtnColorPrompt();
SaveSettingsToFile(); SaveSettingsToFile();
} }
@@ -4247,13 +4226,6 @@ namespace Ink_Canvas
SaveSettingsToFile(); SaveSettingsToFile();
} }
private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn;
SaveSettingsToFile();
}
#region #region
private void PPTButtonLBPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e) private void PPTButtonLBPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e)
@@ -4357,13 +4329,6 @@ namespace Ink_Canvas
#endregion #endregion
private void ComboBoxPalmEraserSensitivity_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!isLoaded) return;
Settings.Canvas.PalmEraserSensitivity = ComboBoxPalmEraserSensitivity.SelectedIndex;
SaveSettingsToFile();
}
#region #region
private void BtnUnregisterFileAssociation_Click(object sender, RoutedEventArgs e) private void BtnUnregisterFileAssociation_Click(object sender, RoutedEventArgs e)
+4 -22
View File
@@ -231,25 +231,21 @@ namespace Ink_Canvas
else else
{ {
Settings.Startup = new Startup(); Settings.Startup = new Startup();
Settings.Startup.IsEnableNibMode = false; // 默认关闭笔尖模式 Settings.Startup.IsEnableNibMode = false;
ToggleSwitchEnableNibMode.IsOn = false; // 默认关闭笔尖模式 ToggleSwitchEnableNibMode.IsOn = false;
BoardToggleSwitchEnableNibMode.IsOn = false; // 默认关闭笔尖模式 BoardToggleSwitchEnableNibMode.IsOn = false;
BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; // 使用手指模式边界宽度 BoundsWidth = Settings.Advanced.FingerModeBoundsWidth;
} }
// 恢复崩溃后操作设置
if (Settings.Startup != null) if (Settings.Startup != null)
{ {
// 恢复崩溃后操作选项
if (Settings.Startup.CrashAction == 0) if (Settings.Startup.CrashAction == 0)
{ {
App.CrashAction = App.CrashActionType.SilentRestart; App.CrashAction = App.CrashActionType.SilentRestart;
if (RadioCrashSilentRestart != null) RadioCrashSilentRestart.IsChecked = true;
} }
else else
{ {
App.CrashAction = App.CrashActionType.NoAction; App.CrashAction = App.CrashActionType.NoAction;
if (RadioCrashNoAction != null) RadioCrashNoAction.IsChecked = true;
} }
} }
@@ -658,13 +654,6 @@ namespace Ink_Canvas
ToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation; ToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation;
BoardToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation; BoardToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation;
ToggleSwitchAutoSwitchTwoFingerGesture.IsOn = Settings.Gesture.AutoSwitchTwoFingerGesture;
ToggleSwitchEnableTwoFingerRotation.IsOn = Settings.Gesture.IsEnableTwoFingerRotation;
ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn =
Settings.Gesture.IsEnableTwoFingerRotationOnSelection;
if (Settings.Gesture.AutoSwitchTwoFingerGesture) if (Settings.Gesture.AutoSwitchTwoFingerGesture)
{ {
if (Topmost) if (Topmost)
@@ -855,13 +844,6 @@ namespace Ink_Canvas
Settings.Canvas = new Canvas(); Settings.Canvas = new Canvas();
} }
// Palm Eraser
if (Settings.Canvas != null)
{
ToggleSwitchEnablePalmEraser.IsOn = Settings.Canvas.EnablePalmEraser;
ComboBoxPalmEraserSensitivity.SelectedIndex = Settings.Canvas.PalmEraserSensitivity;
}
// Advanced // Advanced
if (Settings.Advanced != null) if (Settings.Advanced != null)
{ {
+2 -4
View File
@@ -233,8 +233,7 @@ namespace Ink_Canvas
if (palmEraserWasEnabledBeforeMultiTouch) if (palmEraserWasEnabledBeforeMultiTouch)
{ {
Settings.Canvas.EnablePalmEraser = true; Settings.Canvas.EnablePalmEraser = true;
if (ToggleSwitchEnablePalmEraser != null) SaveSettingsToFile();
ToggleSwitchEnablePalmEraser.IsOn = true;
} }
} }
else else
@@ -259,8 +258,7 @@ namespace Ink_Canvas
palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser; palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser;
Settings.Canvas.EnablePalmEraser = false; Settings.Canvas.EnablePalmEraser = false;
if (ToggleSwitchEnablePalmEraser != null) SaveSettingsToFile();
ToggleSwitchEnablePalmEraser.IsOn = false;
} }
} }
+7 -1
View File
@@ -987,8 +987,14 @@
<data name="Startup_ExternalProtocolHint" xml:space="preserve"> <data name="Startup_ExternalProtocolHint" xml:space="preserve">
<value>Control via icc:// protocol</value> <value>Control via icc:// protocol</value>
</data> </data>
<data name="Startup_EnableNibMode" xml:space="preserve">
<value>Nib Mode</value>
</data>
<data name="Startup_EnableNibModeHint" xml:space="preserve">
<value>Only respond to pen tip touch, ignore palm and finger</value>
</data>
<data name="Canvas_GroupTitle" xml:space="preserve"> <data name="Canvas_GroupTitle" xml:space="preserve">
<value>Canvas and ink</value> <value>Canvas</value>
</data> </data>
<data name="Canvas_ShowCursor" xml:space="preserve"> <data name="Canvas_ShowCursor" xml:space="preserve">
<value>Show pen cursor</value> <value>Show pen cursor</value>
+7 -1
View File
@@ -1029,8 +1029,14 @@
<data name="Startup_ExternalProtocolHint" xml:space="preserve"> <data name="Startup_ExternalProtocolHint" xml:space="preserve">
<value>通过 icc:// 协议从外部控制软件</value> <value>通过 icc:// 协议从外部控制软件</value>
</data> </data>
<data name="Startup_EnableNibMode" xml:space="preserve">
<value>笔尖模式</value>
</data>
<data name="Startup_EnableNibModeHint" xml:space="preserve">
<value>启用后仅响应笔尖触摸,忽略手掌和手指</value>
</data>
<data name="Canvas_GroupTitle" xml:space="preserve"> <data name="Canvas_GroupTitle" xml:space="preserve">
<value>画板和墨迹</value> <value>画板</value>
</data> </data>
<data name="Canvas_ShowCursor" xml:space="preserve"> <data name="Canvas_ShowCursor" xml:space="preserve">
<value>显示画笔光标</value> <value>显示画笔光标</value>
@@ -140,20 +140,25 @@
SwitchName="ToggleSwitchEnableInkFade" SwitchName="ToggleSwitchEnableInkFade"
Toggled="ToggleSwitchEnableInkFade_Toggled" /> Toggled="ToggleSwitchEnableInkFade_Toggled" />
<ui:SettingsCard Header="{i18n:I18n Key=Canvas_InkFadeTime}" <ui:SettingsExpander Header="{i18n:I18n Key=Canvas_EnableInkFade}"
Visibility="{Binding IsOn, ElementName=CardEnableInkFade, Converter={StaticResource BooleanToVisibilityConverter}}" Visibility="{Binding IsOn, ElementName=CardEnableInkFade, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardEnableInkFade, Mode=OneWay}"
d:Visibility="Visible"> d:Visibility="Visible">
<ui:SettingsCard.HeaderIcon> <ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Stopwatch}" /> <ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" />
</ui:SettingsCard.HeaderIcon> </ui:SettingsExpander.HeaderIcon>
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12"> <ui:SettingsExpander.Items>
<Slider x:Name="InkFadeTimeSlider" Width="150" Minimum="1000" Maximum="10000" <ui:SettingsCard Header="{i18n:I18n Key=Canvas_InkFadeTime}">
Value="3000" TickFrequency="1000" IsSnapToTickEnabled="True" <ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
ValueChanged="InkFadeTimeSlider_ValueChanged" /> <Slider x:Name="InkFadeTimeSlider" Width="150" Minimum="1000" Maximum="10000"
<TextBlock Text="{Binding Value, ElementName=InkFadeTimeSlider, StringFormat={}{0:0}ms}" Value="3000" TickFrequency="1000" IsSnapToTickEnabled="True"
VerticalAlignment="Center" FontSize="14" /> ValueChanged="InkFadeTimeSlider_ValueChanged" />
</ikw:SimpleStackPanel> <TextBlock Text="{Binding Value, ElementName=InkFadeTimeSlider, StringFormat={}{0:0}ms}"
</ui:SettingsCard> VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<controls:LabeledSettingsCard x:Name="CardHideInkFadeControlInPenMenu" <controls:LabeledSettingsCard x:Name="CardHideInkFadeControlInPenMenu"
Header="{i18n:I18n Key=Canvas_HideInkFadeInPenMenu}" Header="{i18n:I18n Key=Canvas_HideInkFadeInPenMenu}"
@@ -223,144 +228,69 @@
SwitchName="ToggleSwitchEnableEraserAutoSwitchBack" SwitchName="ToggleSwitchEnableEraserAutoSwitchBack"
Toggled="ToggleSwitchEnableEraserAutoSwitchBack_Toggled" /> Toggled="ToggleSwitchEnableEraserAutoSwitchBack_Toggled" />
<ui:SettingsCard Header="{i18n:I18n Key=Canvas_SwitchBackDelay}" <ui:SettingsExpander Header="{i18n:I18n Key=Canvas_SwitchBackAfterEraser}"
Description="{i18n:I18n Key=Canvas_SwitchBackDelayHint}"
Visibility="{Binding IsOn, ElementName=CardEnableEraserAutoSwitchBack, Converter={StaticResource BooleanToVisibilityConverter}}" Visibility="{Binding IsOn, ElementName=CardEnableEraserAutoSwitchBack, Converter={StaticResource BooleanToVisibilityConverter}}"
d:Visibility="Visible"> IsExpanded="{Binding IsOn, ElementName=CardEnableEraserAutoSwitchBack, Mode=OneWay}"
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
<Slider x:Name="EraserAutoSwitchBackDelaySlider" Width="150" Minimum="1" Maximum="60"
Value="10" TickFrequency="1" IsSnapToTickEnabled="True"
ValueChanged="EraserAutoSwitchBackDelaySlider_ValueChanged" />
<TextBlock Text="{Binding Value, ElementName=EraserAutoSwitchBackDelaySlider, StringFormat={}{0:0}秒}"
VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{i18n:I18n Key=InkRecog_Title}" />
<controls:LabeledSettingsCard x:Name="CardEnableInkToShape"
Header="{i18n:I18n Key=InkRecog_EnableInkRecognition}"
Icon="{x:Static ui:SegoeFluentIcons.Draw}"
SwitchName="ToggleSwitchEnableInkToShape"
Toggled="ToggleSwitchEnableInkToShape_Toggled" />
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_ShapeEngine}"
Description="{i18n:I18n Key=InkRecog_ShapeEngineHint}">
<ComboBox x:Name="ComboBoxShapeRecognitionEngine"
SelectionChanged="ComboBoxShapeRecognitionEngine_SelectionChanged">
<ComboBoxItem Content="{i18n:I18n Key=InkRecog_ShapeEngineAuto}" />
<ComboBoxItem Content="{i18n:I18n Key=InkRecog_ShapeEngineIACore}" />
<ComboBoxItem Content="{i18n:I18n Key=InkRecog_ShapeEngineWinRT}" />
</ComboBox>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardEnableWinRtHandwritingStrokeBeautify"
Header="{i18n:I18n Key=InkRecog_HandwritingBeautify}"
Description="{i18n:I18n Key=InkRecog_HandwritingBeautifyHint}"
Icon="{x:Static ui:SegoeFluentIcons.PenWorkspace}"
SwitchName="ToggleSwitchEnableWinRtHandwritingStrokeBeautify"
Toggled="ToggleSwitchEnableWinRtHandwritingStrokeBeautify_Toggled" />
<controls:LabeledSettingsCard x:Name="CardEnableInkToShapeNoFakePressureRectangle"
Header="{i18n:I18n Key=InkRecog_BlockRectFakePressure}"
ShowWhen="{Binding IsOn, ElementName=CardEnableInkToShape}"
d:Visibility="Visible"
Icon="{x:Static ui:SegoeFluentIcons.RectangularClipping}"
SwitchName="ToggleSwitchEnableInkToShapeNoFakePressureRectangle"
Toggled="ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled" />
<controls:LabeledSettingsCard x:Name="CardEnableInkToShapeNoFakePressureTriangle"
Header="{i18n:I18n Key=InkRecog_BlockTriFakePressure}"
ShowWhen="{Binding IsOn, ElementName=CardEnableInkToShape}"
d:Visibility="Visible"
Icon="{x:Static ui:SegoeFluentIcons.IncidentTriangle}"
SwitchName="ToggleSwitchEnableInkToShapeNoFakePressureTriangle"
Toggled="ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled" />
<ui:SettingsExpander Header="形状修正"
Visibility="{Binding IsOn, ElementName=CardEnableInkToShape, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardEnableInkToShape, Mode=OneWay}"
d:Visibility="Visible"> d:Visibility="Visible">
<ui:SettingsExpander.HeaderIcon> <ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" /> <ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" />
</ui:SettingsExpander.HeaderIcon> </ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items> <ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_FixTriangle}"> <ui:SettingsCard Header="{i18n:I18n Key=Canvas_SwitchBackDelay}"
<CheckBox x:Name="ToggleCheckboxEnableInkToShapeTriangle" IsChecked="True" Description="{i18n:I18n Key=Canvas_SwitchBackDelayHint}">
Checked="ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged" <ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
Unchecked="ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged" /> <Slider x:Name="EraserAutoSwitchBackDelaySlider" Width="150" Minimum="1" Maximum="60"
</ui:SettingsCard> Value="10" TickFrequency="1" IsSnapToTickEnabled="True"
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_FixRectangle}"> ValueChanged="EraserAutoSwitchBackDelaySlider_ValueChanged" />
<CheckBox x:Name="ToggleCheckboxEnableInkToShapeRectangle" IsChecked="True" <TextBlock Text="{Binding Value, ElementName=EraserAutoSwitchBackDelaySlider, StringFormat={}{0:0}秒}"
Checked="ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged" VerticalAlignment="Center" FontSize="14" />
Unchecked="ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged" /> </ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_FixEllipse}">
<CheckBox x:Name="ToggleCheckboxEnableInkToShapeRounded" IsChecked="True"
Checked="ToggleCheckboxEnableInkToShapeRounded_CheckedChanged"
Unchecked="ToggleCheckboxEnableInkToShapeRounded_CheckedChanged" />
</ui:SettingsCard> </ui:SettingsCard>
</ui:SettingsExpander.Items> </ui:SettingsExpander.Items>
</ui:SettingsExpander> </ui:SettingsExpander>
<controls:LabeledSettingsCard x:Name="CardAutoStraightenLine" <TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Header="{i18n:I18n Key=InkRecog_AutoStraightLine}" Text="{i18n:I18n Key=Gesture_Title}" />
Icon="{x:Static ui:SegoeFluentIcons.LineDisplay}"
SwitchName="ToggleSwitchAutoStraightenLine"
Toggled="ToggleSwitchAutoStraightenLine_Toggled" />
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_LengthThreshold}" <controls:LabeledSettingsCard x:Name="CardAutoSwitchTwoFingerGesture"
Visibility="{Binding IsOn, ElementName=CardAutoStraightenLine, Converter={StaticResource BooleanToVisibilityConverter}}" Header="{i18n:I18n Key=Gesture_AutoToggleTwoFinger}"
Description="{i18n:I18n Key=Gesture_AutoToggleHint}"
Icon="{x:Static ui:SegoeFluentIcons.Switch}"
SwitchName="ToggleSwitchAutoSwitchTwoFingerGesture"
Toggled="ToggleSwitchAutoSwitchTwoFingerGesture_Toggled" />
<controls:LabeledSettingsCard x:Name="CardEnableTwoFingerRotationOnSelection"
Header="{i18n:I18n Key=Gesture_AllowRotateScale}"
Description="{i18n:I18n Key=Gesture_AllowRotateScaleHint}"
Icon="{x:Static ui:SegoeFluentIcons.Rotate}"
SwitchName="ToggleSwitchEnableTwoFingerRotationOnSelection"
Toggled="ToggleSwitchEnableTwoFingerRotationOnSelection_Toggled" />
<controls:LabeledSettingsCard x:Name="CardEnablePalmEraser"
Header="{i18n:I18n Key=Gesture_EnablePalmEraser}"
Description="{i18n:I18n Key=Gesture_PalmHint}"
Icon="{x:Static ui:SegoeFluentIcons.EraseTool}"
SwitchName="ToggleSwitchEnablePalmEraser"
Toggled="ToggleSwitchEnablePalmEraser_Toggled" />
<ui:SettingsExpander Header="{i18n:I18n Key=Gesture_EnablePalmEraser}"
Visibility="{Binding IsOn, ElementName=CardEnablePalmEraser, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardEnablePalmEraser, Mode=OneWay}"
d:Visibility="Visible"> d:Visibility="Visible">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12"> <ui:SettingsExpander.HeaderIcon>
<Slider x:Name="AutoStraightenLineThresholdSlider" Width="150" Minimum="30" Maximum="300" <ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" />
Value="80" TickFrequency="30" IsSnapToTickEnabled="True" </ui:SettingsExpander.HeaderIcon>
ValueChanged="AutoStraightenLineThresholdSlider_ValueChanged" /> <ui:SettingsExpander.Items>
<TextBlock Text="{Binding Value, ElementName=AutoStraightenLineThresholdSlider, StringFormat={}{0:0}}" <ui:SettingsCard Header="{i18n:I18n Key=Gesture_PalmSensitivity}">
VerticalAlignment="Center" FontSize="14" /> <ComboBox x:Name="ComboBoxPalmEraserSensitivity"
</ikw:SimpleStackPanel> SelectionChanged="ComboBoxPalmEraserSensitivity_SelectionChanged">
</ui:SettingsCard> <ComboBoxItem Content="{i18n:I18n Key=Gesture_PalmSensitivityLow}" />
<ComboBoxItem Content="{i18n:I18n Key=Gesture_PalmSensitivityMedium}" />
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_Sensitivity}" <ComboBoxItem Content="{i18n:I18n Key=Gesture_PalmSensitivityHigh}" />
Visibility="{Binding IsOn, ElementName=CardAutoStraightenLine, Converter={StaticResource BooleanToVisibilityConverter}}" </ComboBox>
d:Visibility="Visible"> </ui:SettingsCard>
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12"> </ui:SettingsExpander.Items>
<Slider x:Name="LineStraightenSensitivitySlider" Width="150" Minimum="0.05" Maximum="2.0" </ui:SettingsExpander>
Value="0.20" TickFrequency="0.05" IsSnapToTickEnabled="True"
ValueChanged="LineStraightenSensitivitySlider_ValueChanged" />
<TextBlock Text="{Binding Value, ElementName=LineStraightenSensitivitySlider, StringFormat={}{0:F2}}"
VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardHighPrecisionLineStraighten"
Header="{i18n:I18n Key=InkRecog_HighPrecisionStraighten}"
Description="{i18n:I18n Key=InkRecog_HighPrecisionHint}"
ShowWhen="{Binding IsOn, ElementName=CardAutoStraightenLine}"
d:Visibility="Visible"
Icon="{x:Static ui:SegoeFluentIcons.Bullseye}"
SwitchName="ToggleSwitchHighPrecisionLineStraighten"
Toggled="ToggleSwitchHighPrecisionLineStraighten_Toggled" />
<controls:LabeledSettingsCard x:Name="CardLineEndpointSnapping"
Header="{i18n:I18n Key=InkRecog_LineEndpointSnapping}"
Icon="{x:Static ui:SegoeFluentIcons.Link}"
SwitchName="ToggleSwitchLineEndpointSnapping"
Toggled="ToggleSwitchLineEndpointSnapping_Toggled" />
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_SnappingDistance}"
Description="{i18n:I18n Key=InkRecog_LineEndpointSnappingHint}"
Visibility="{Binding IsOn, ElementName=CardLineEndpointSnapping, Converter={StaticResource BooleanToVisibilityConverter}}"
d:Visibility="Visible">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
<Slider x:Name="LineEndpointSnappingThresholdSlider" Width="150" Minimum="5" Maximum="50"
Value="15" TickFrequency="5" IsSnapToTickEnabled="True"
ValueChanged="LineEndpointSnappingThresholdSlider_ValueChanged" />
<TextBlock Text="{Binding Value, ElementName=LineEndpointSnappingThresholdSlider, StringFormat={}{0:0}}"
VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<Rectangle Height="48" /> <Rectangle Height="48" />
@@ -1,4 +1,3 @@
using Ink_Canvas.Helpers;
using Ink_Canvas.Windows.SettingsViews.Helpers; using Ink_Canvas.Windows.SettingsViews.Helpers;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
@@ -57,26 +56,18 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
BrushAutoRestoreAlphaSlider.Value = settings.Canvas.BrushAutoRestoreAlpha; BrushAutoRestoreAlphaSlider.Value = settings.Canvas.BrushAutoRestoreAlpha;
CardEnableEraserAutoSwitchBack.IsOn = settings.Canvas.EnableEraserAutoSwitchBack; CardEnableEraserAutoSwitchBack.IsOn = settings.Canvas.EnableEraserAutoSwitchBack;
EraserAutoSwitchBackDelaySlider.Value = settings.Canvas.EraserAutoSwitchBackDelaySeconds; EraserAutoSwitchBackDelaySlider.Value = settings.Canvas.EraserAutoSwitchBackDelaySeconds;
CardAutoStraightenLine.IsOn = settings.Canvas.AutoStraightenLine;
AutoStraightenLineThresholdSlider.Value = settings.Canvas.AutoStraightenLineThreshold;
CardHighPrecisionLineStraighten.IsOn = settings.Canvas.HighPrecisionLineStraighten;
CardLineEndpointSnapping.IsOn = settings.Canvas.LineEndpointSnapping;
} }
if (settings.InkToShape != null) if (settings.Gesture != null)
{ {
CardEnableInkToShape.IsOn = settings.InkToShape.IsInkToShapeEnabled; CardAutoSwitchTwoFingerGesture.IsOn = settings.Gesture.AutoSwitchTwoFingerGesture;
int eng = settings.InkToShape.ShapeRecognitionEngine; CardEnableTwoFingerRotationOnSelection.IsOn = settings.Gesture.IsEnableTwoFingerRotationOnSelection;
if (eng < 0) eng = 0; }
if (eng > 2) eng = 2;
ComboBoxShapeRecognitionEngine.SelectedIndex = eng; if (settings.Canvas != null)
CardEnableWinRtHandwritingStrokeBeautify.IsOn = settings.InkToShape.EnableWinRtHandwritingStrokeBeautify; {
CardEnableInkToShapeNoFakePressureRectangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureRectangle; CardEnablePalmEraser.IsOn = settings.Canvas.EnablePalmEraser;
CardEnableInkToShapeNoFakePressureTriangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureTriangle; ComboBoxPalmEraserSensitivity.SelectedIndex = settings.Canvas.PalmEraserSensitivity;
ToggleCheckboxEnableInkToShapeTriangle.IsChecked = settings.InkToShape.IsInkToShapeTriangle;
ToggleCheckboxEnableInkToShapeRectangle.IsChecked = settings.InkToShape.IsInkToShapeRectangle;
ToggleCheckboxEnableInkToShapeRounded.IsChecked = settings.InkToShape.IsInkToShapeRounded;
LineStraightenSensitivitySlider.Value = settings.InkToShape.LineStraightenSensitivity;
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -108,8 +99,6 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
} }
} }
#region
private void ToggleSwitchShowCursor_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitchShowCursor_Toggled(object sender, RoutedEventArgs e)
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
@@ -295,111 +284,32 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
SettingsManager.SaveSettingsToFile(); SettingsManager.SaveSettingsToFile();
} }
#endregion private void ToggleSwitchAutoSwitchTwoFingerGesture_Toggled(object sender, RoutedEventArgs e)
#region
private void ToggleSwitchEnableInkToShape_Toggled(object sender, RoutedEventArgs e)
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeEnabled = CardEnableInkToShape.IsOn; SettingsManager.Settings.Gesture.AutoSwitchTwoFingerGesture = CardAutoSwitchTwoFingerGesture.IsOn;
SettingsManager.SaveSettingsToFile(); SettingsManager.SaveSettingsToFile();
} }
private void ComboBoxShapeRecognitionEngine_SelectionChanged(object sender, SelectionChangedEventArgs e) private void ToggleSwitchEnableTwoFingerRotationOnSelection_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded || ComboBoxShapeRecognitionEngine == null) return;
int idx = ComboBoxShapeRecognitionEngine.SelectedIndex;
if (idx < 0) idx = 0;
if (idx > 2) idx = 2;
SettingsManager.Settings.InkToShape.ShapeRecognitionEngine = idx;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableWinRtHandwritingStrokeBeautify_Toggled(object sender, RoutedEventArgs e)
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.EnableWinRtHandwritingStrokeBeautify = CardEnableWinRtHandwritingStrokeBeautify.IsOn; SettingsManager.Settings.Gesture.IsEnableTwoFingerRotationOnSelection = CardEnableTwoFingerRotationOnSelection.IsOn;
SettingsManager.SaveSettingsToFile(); SettingsManager.SaveSettingsToFile();
} }
private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e)
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = CardEnableInkToShapeNoFakePressureRectangle.IsOn; SettingsManager.Settings.Canvas.EnablePalmEraser = CardEnablePalmEraser.IsOn;
SettingsManager.SaveSettingsToFile(); SettingsManager.SaveSettingsToFile();
} }
private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e) private void ComboBoxPalmEraserSensitivity_SelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
if (!_isLoaded) return; if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = CardEnableInkToShapeNoFakePressureTriangle.IsOn; SettingsManager.Settings.Canvas.PalmEraserSensitivity = ComboBoxPalmEraserSensitivity.SelectedIndex;
SettingsManager.SaveSettingsToFile(); SettingsManager.SaveSettingsToFile();
} }
private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeTriangle = (bool)ToggleCheckboxEnableInkToShapeTriangle.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeRectangle = (bool)ToggleCheckboxEnableInkToShapeRectangle.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeRounded = (bool)ToggleCheckboxEnableInkToShapeRounded.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoStraightenLine_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.AutoStraightenLine = CardAutoStraightenLine.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void AutoStraightenLineThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.AutoStraightenLineThreshold = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void LineStraightenSensitivitySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.LineStraightenSensitivity = e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchHighPrecisionLineStraighten_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.HighPrecisionLineStraighten = CardHighPrecisionLineStraighten.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchLineEndpointSnapping_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.LineEndpointSnapping = CardLineEndpointSnapping.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void LineEndpointSnappingThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.LineEndpointSnappingThreshold = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
#endregion
} }
} }
@@ -71,13 +71,20 @@
</ui:SettingsCard.HeaderIcon> </ui:SettingsCard.HeaderIcon>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="画板" Description="画板与墨迹设置" <ui:SettingsCard Header="画板" Description="画板设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="CanvasPage"> IsClickEnabled="True" Click="QuickNavCard_Click" Tag="CanvasPage">
<ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" /> <ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" />
</ui:SettingsCard.HeaderIcon> </ui:SettingsCard.HeaderIcon>
</ui:SettingsCard> </ui:SettingsCard>
<ui:SettingsCard Header="墨迹纠正" Description="墨迹纠正设置"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="InkRecognitionPage">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Draw}" />
</ui:SettingsCard.HeaderIcon>
</ui:SettingsCard>
<ui:SettingsCard Header="关于" Description="关于 InkCanvasForClass" <ui:SettingsCard Header="关于" Description="关于 InkCanvasForClass"
IsClickEnabled="True" Click="QuickNavCard_Click" Tag="AboutPage"> IsClickEnabled="True" Click="QuickNavCard_Click" Tag="AboutPage">
<ui:SettingsCard.HeaderIcon> <ui:SettingsCard.HeaderIcon>
@@ -0,0 +1,174 @@
<ui:Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.InkRecognitionPage"
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:i18n="clr-namespace:Ink_Canvas.MarkupExtensions"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
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>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<c:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<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}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{i18n:I18n Key=InkRecog_Title}" />
<controls:LabeledSettingsCard x:Name="CardEnableInkToShape"
Header="{i18n:I18n Key=InkRecog_EnableInkRecognition}"
Icon="{x:Static ui:SegoeFluentIcons.Draw}"
SwitchName="ToggleSwitchEnableInkToShape"
Toggled="ToggleSwitchEnableInkToShape_Toggled" />
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_ShapeEngine}"
Description="{i18n:I18n Key=InkRecog_ShapeEngineHint}">
<ComboBox x:Name="ComboBoxShapeRecognitionEngine"
SelectionChanged="ComboBoxShapeRecognitionEngine_SelectionChanged">
<ComboBoxItem Content="{i18n:I18n Key=InkRecog_ShapeEngineAuto}" />
<ComboBoxItem Content="{i18n:I18n Key=InkRecog_ShapeEngineIACore}" />
<ComboBoxItem Content="{i18n:I18n Key=InkRecog_ShapeEngineWinRT}" />
</ComboBox>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardEnableWinRtHandwritingStrokeBeautify"
Header="{i18n:I18n Key=InkRecog_HandwritingBeautify}"
Description="{i18n:I18n Key=InkRecog_HandwritingBeautifyHint}"
Icon="{x:Static ui:SegoeFluentIcons.PenWorkspace}"
SwitchName="ToggleSwitchEnableWinRtHandwritingStrokeBeautify"
Toggled="ToggleSwitchEnableWinRtHandwritingStrokeBeautify_Toggled" />
<controls:LabeledSettingsCard x:Name="CardEnableInkToShapeNoFakePressureRectangle"
Header="{i18n:I18n Key=InkRecog_BlockRectFakePressure}"
ShowWhen="{Binding IsOn, ElementName=CardEnableInkToShape}"
d:Visibility="Visible"
Icon="{x:Static ui:SegoeFluentIcons.RectangularClipping}"
SwitchName="ToggleSwitchEnableInkToShapeNoFakePressureRectangle"
Toggled="ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled" />
<controls:LabeledSettingsCard x:Name="CardEnableInkToShapeNoFakePressureTriangle"
Header="{i18n:I18n Key=InkRecog_BlockTriFakePressure}"
ShowWhen="{Binding IsOn, ElementName=CardEnableInkToShape}"
d:Visibility="Visible"
Icon="{x:Static ui:SegoeFluentIcons.IncidentTriangle}"
SwitchName="ToggleSwitchEnableInkToShapeNoFakePressureTriangle"
Toggled="ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled" />
<ui:SettingsExpander Header="形状修正"
Visibility="{Binding IsOn, ElementName=CardEnableInkToShape, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardEnableInkToShape, Mode=OneWay}"
d:Visibility="Visible">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" />
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_FixTriangle}">
<CheckBox x:Name="ToggleCheckboxEnableInkToShapeTriangle" IsChecked="True"
Checked="ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged"
Unchecked="ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged" />
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_FixRectangle}">
<CheckBox x:Name="ToggleCheckboxEnableInkToShapeRectangle" IsChecked="True"
Checked="ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged"
Unchecked="ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged" />
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_FixEllipse}">
<CheckBox x:Name="ToggleCheckboxEnableInkToShapeRounded" IsChecked="True"
Checked="ToggleCheckboxEnableInkToShapeRounded_CheckedChanged"
Unchecked="ToggleCheckboxEnableInkToShapeRounded_CheckedChanged" />
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<controls:LabeledSettingsCard x:Name="CardAutoStraightenLine"
Header="{i18n:I18n Key=InkRecog_AutoStraightLine}"
Icon="{x:Static ui:SegoeFluentIcons.LineDisplay}"
SwitchName="ToggleSwitchAutoStraightenLine"
Toggled="ToggleSwitchAutoStraightenLine_Toggled" />
<ui:SettingsExpander Header="{i18n:I18n Key=InkRecog_AutoStraightLine}"
Visibility="{Binding IsOn, ElementName=CardAutoStraightenLine, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardAutoStraightenLine, Mode=OneWay}"
d:Visibility="Visible">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" />
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_LengthThreshold}">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
<Slider x:Name="AutoStraightenLineThresholdSlider" Width="150" Minimum="30" Maximum="300"
Value="80" TickFrequency="30" IsSnapToTickEnabled="True"
ValueChanged="AutoStraightenLineThresholdSlider_ValueChanged" />
<TextBlock Text="{Binding Value, ElementName=AutoStraightenLineThresholdSlider, StringFormat={}{0:0}}"
VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_Sensitivity}">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
<Slider x:Name="LineStraightenSensitivitySlider" Width="150" Minimum="0.05" Maximum="2.0"
Value="0.20" TickFrequency="0.05" IsSnapToTickEnabled="True"
ValueChanged="LineStraightenSensitivitySlider_ValueChanged" />
<TextBlock Text="{Binding Value, ElementName=LineStraightenSensitivitySlider, StringFormat={}{0:F2}}"
VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_HighPrecisionStraighten}"
Description="{i18n:I18n Key=InkRecog_HighPrecisionHint}">
<CheckBox x:Name="CheckboxHighPrecisionLineStraighten" IsChecked="False"
Checked="CheckboxHighPrecisionLineStraighten_CheckedChanged"
Unchecked="CheckboxHighPrecisionLineStraighten_CheckedChanged" />
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<controls:LabeledSettingsCard x:Name="CardLineEndpointSnapping"
Header="{i18n:I18n Key=InkRecog_LineEndpointSnapping}"
Icon="{x:Static ui:SegoeFluentIcons.Link}"
SwitchName="ToggleSwitchLineEndpointSnapping"
Toggled="ToggleSwitchLineEndpointSnapping_Toggled" />
<ui:SettingsExpander Header="{i18n:I18n Key=InkRecog_LineEndpointSnapping}"
Visibility="{Binding IsOn, ElementName=CardLineEndpointSnapping, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardLineEndpointSnapping, Mode=OneWay}"
d:Visibility="Visible">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}" />
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=InkRecog_SnappingDistance}"
Description="{i18n:I18n Key=InkRecog_LineEndpointSnappingHint}">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
<Slider x:Name="LineEndpointSnappingThresholdSlider" Width="150" Minimum="5" Maximum="50"
Value="15" TickFrequency="5" IsSnapToTickEnabled="True"
ValueChanged="LineEndpointSnappingThresholdSlider_ValueChanged" />
<TextBlock Text="{Binding Value, ElementName=LineEndpointSnappingThresholdSlider, StringFormat={}{0:0}}"
VerticalAlignment="Center" FontSize="14" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<Rectangle Height="48" />
</ikw:SimpleStackPanel>
</Grid>
</Grid>
</ScrollViewer>
</ui:Page>
@@ -0,0 +1,166 @@
using Ink_Canvas.Windows.SettingsViews.Helpers;
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class InkRecognitionPage : iNKORE.UI.WPF.Modern.Controls.Page
{
private bool _isLoaded = false;
public InkRecognitionPage()
{
InitializeComponent();
Loaded += InkRecognitionPage_Loaded;
}
private void InkRecognitionPage_Loaded(object sender, RoutedEventArgs e)
{
LoadSettings();
_isLoaded = true;
}
private void LoadSettings()
{
_isLoaded = false;
try
{
var settings = SettingsManager.Settings;
if (settings.InkToShape != null)
{
CardEnableInkToShape.IsOn = settings.InkToShape.IsInkToShapeEnabled;
int eng = settings.InkToShape.ShapeRecognitionEngine;
if (eng < 0) eng = 0;
if (eng > 2) eng = 2;
ComboBoxShapeRecognitionEngine.SelectedIndex = eng;
CardEnableWinRtHandwritingStrokeBeautify.IsOn = settings.InkToShape.EnableWinRtHandwritingStrokeBeautify;
CardEnableInkToShapeNoFakePressureRectangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureRectangle;
CardEnableInkToShapeNoFakePressureTriangle.IsOn = settings.InkToShape.IsInkToShapeNoFakePressureTriangle;
ToggleCheckboxEnableInkToShapeTriangle.IsChecked = settings.InkToShape.IsInkToShapeTriangle;
ToggleCheckboxEnableInkToShapeRectangle.IsChecked = settings.InkToShape.IsInkToShapeRectangle;
ToggleCheckboxEnableInkToShapeRounded.IsChecked = settings.InkToShape.IsInkToShapeRounded;
LineStraightenSensitivitySlider.Value = settings.InkToShape.LineStraightenSensitivity;
}
if (settings.Canvas != null)
{
CardAutoStraightenLine.IsOn = settings.Canvas.AutoStraightenLine;
AutoStraightenLineThresholdSlider.Value = settings.Canvas.AutoStraightenLineThreshold;
CheckboxHighPrecisionLineStraighten.IsChecked = settings.Canvas.HighPrecisionLineStraighten;
CardLineEndpointSnapping.IsOn = settings.Canvas.LineEndpointSnapping;
}
}
catch (Exception ex)
{
Debug.WriteLine($"加载墨迹纠正设置时出错: {ex.Message}");
}
_isLoaded = true;
}
private void ToggleSwitchEnableInkToShape_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeEnabled = CardEnableInkToShape.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxShapeRecognitionEngine_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded || ComboBoxShapeRecognitionEngine == null) return;
int idx = ComboBoxShapeRecognitionEngine.SelectedIndex;
if (idx < 0) idx = 0;
if (idx > 2) idx = 2;
SettingsManager.Settings.InkToShape.ShapeRecognitionEngine = idx;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableWinRtHandwritingStrokeBeautify_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.EnableWinRtHandwritingStrokeBeautify = CardEnableWinRtHandwritingStrokeBeautify.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = CardEnableInkToShapeNoFakePressureRectangle.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = CardEnableInkToShapeNoFakePressureTriangle.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeTriangle = (bool)ToggleCheckboxEnableInkToShapeTriangle.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeRectangle = (bool)ToggleCheckboxEnableInkToShapeRectangle.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeRounded = (bool)ToggleCheckboxEnableInkToShapeRounded.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoStraightenLine_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.AutoStraightenLine = CardAutoStraightenLine.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void AutoStraightenLineThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.AutoStraightenLineThreshold = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void LineStraightenSensitivitySlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.LineStraightenSensitivity = e.NewValue;
SettingsManager.SaveSettingsToFile();
}
private void CheckboxHighPrecisionLineStraighten_CheckedChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.HighPrecisionLineStraighten = (bool)CheckboxHighPrecisionLineStraighten.IsChecked;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchLineEndpointSnapping_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.LineEndpointSnapping = CardLineEndpointSnapping.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void LineEndpointSnappingThresholdSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.LineEndpointSnappingThreshold = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
}
}
}
@@ -69,6 +69,36 @@
SwitchName="ToggleSwitchPPTOnlyMode" SwitchName="ToggleSwitchPPTOnlyMode"
Toggled="ToggleSwitchPPTOnlyMode_Toggled" /> Toggled="ToggleSwitchPPTOnlyMode_Toggled" />
<!-- 笔尖模式 -->
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{i18n:I18n Key=Startup_EnableNibMode}" />
<controls:LabeledSettingsCard x:Name="CardEnableNibMode"
Header="{i18n:I18n Key=Startup_EnableNibMode}"
Description="{i18n:I18n Key=Startup_EnableNibModeHint}"
Icon="{x:Static ui:SegoeFluentIcons.TouchPointer}"
SwitchName="ToggleSwitchEnableNibMode"
Toggled="ToggleSwitchEnableNibMode_Toggled" />
<!-- 崩溃后操作 -->
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="{i18n:I18n Key=Crash_Title}" />
<ui:SettingsCard Header="{i18n:I18n Key=Crash_Title}"
Description="{i18n:I18n Key=Crash_Desc}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Warning}" />
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="12">
<RadioButton x:Name="RadioCrashSilentRestart" GroupName="CrashAction"
Content="{i18n:I18n Key=Crash_SilentRestart}"
Checked="RadioCrashAction_Checked" />
<RadioButton x:Name="RadioCrashNoAction" GroupName="CrashAction"
Content="{i18n:I18n Key=Crash_NoAction}"
Checked="RadioCrashAction_Checked" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<!-- 底部空白 --> <!-- 底部空白 -->
<Rectangle Height="48" /> <Rectangle Height="48" />
@@ -3,6 +3,7 @@ using Ink_Canvas.Windows.SettingsViews.Helpers;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Windows; using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.SettingsViews.Pages namespace Ink_Canvas.Windows.SettingsViews.Pages
{ {
@@ -44,6 +45,20 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
} }
CardExternalProtocol.IsOn = settings.Advanced.IsEnableUriScheme; CardExternalProtocol.IsOn = settings.Advanced.IsEnableUriScheme;
if (settings.Startup != null)
{
CardEnableNibMode.IsOn = settings.Startup.IsEnableNibMode;
if (settings.Startup.CrashAction == 0)
{
RadioCrashSilentRestart.IsChecked = true;
}
else
{
RadioCrashNoAction.IsChecked = true;
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -151,6 +166,70 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
#endregion #endregion
#region
private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
try
{
bool newState = CardEnableNibMode.IsOn;
SettingsManager.Settings.Startup.IsEnableNibMode = newState;
var window = Application.Current.MainWindow;
if (window is MainWindow mw)
{
if (mw.ToggleSwitchEnableNibMode != null)
mw.ToggleSwitchEnableNibMode.IsOn = newState;
if (mw.BoardToggleSwitchEnableNibMode != null)
mw.BoardToggleSwitchEnableNibMode.IsOn = newState;
if (newState)
mw.BoundsWidth = SettingsManager.Settings.Advanced.NibModeBoundsWidth;
else
mw.BoundsWidth = SettingsManager.Settings.Advanced.FingerModeBoundsWidth;
}
SettingsManager.SaveSettingsToFile();
}
catch (Exception ex)
{
Debug.WriteLine($"设置笔尖模式时出错: {ex.Message}");
}
}
#endregion
#region
private void RadioCrashAction_Checked(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
try
{
if (RadioCrashSilentRestart != null && RadioCrashSilentRestart.IsChecked == true)
{
App.CrashAction = App.CrashActionType.SilentRestart;
SettingsManager.Settings.Startup.CrashAction = 0;
}
else if (RadioCrashNoAction != null && RadioCrashNoAction.IsChecked == true)
{
App.CrashAction = App.CrashActionType.NoAction;
SettingsManager.Settings.Startup.CrashAction = 1;
}
SettingsManager.SaveSettingsToFile();
App.SyncCrashActionFromSettings();
}
catch (Exception ex)
{
Debug.WriteLine($"设置崩溃操作时出错: {ex.Message}");
}
}
#endregion
#region #region
private void ToggleSwitchPPTOnlyMode_Toggled(object sender, RoutedEventArgs e) private void ToggleSwitchPPTOnlyMode_Toggled(object sender, RoutedEventArgs e)
@@ -205,10 +205,31 @@
x:Name="CanvasPageItem" x:Name="CanvasPageItem"
Content="画板" Content="画板"
Tag="CanvasPage" Tag="CanvasPage"
SelectsOnInvoked="True"
ToolTipService.ToolTip="画板与墨迹设置"> ToolTipService.ToolTip="画板与墨迹设置">
<ui:NavigationViewItem.Icon> <ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/> <ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/>
</ui:NavigationViewItem.Icon> </ui:NavigationViewItem.Icon>
<ui:NavigationViewItem.MenuItems>
<ui:NavigationViewItem
x:Name="CanvasSubPageItem"
Content="画板"
Tag="CanvasPage"
ToolTipService.ToolTip="画板设置">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
<ui:NavigationViewItem
x:Name="InkRecognitionPageItem"
Content="墨迹纠正"
Tag="InkRecognitionPage"
ToolTipService.ToolTip="墨迹纠正设置">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Draw}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
</ui:NavigationViewItem.MenuItems>
</ui:NavigationViewItem> </ui:NavigationViewItem>
<!-- Debug --> <!-- Debug -->
@@ -43,6 +43,7 @@ namespace Ink_Canvas.Windows.SettingsViews
{ "UpdatePage", typeof(UpdatePage) }, { "UpdatePage", typeof(UpdatePage) },
{ "ExperimentalPage", typeof(ExperimentalPage) }, { "ExperimentalPage", typeof(ExperimentalPage) },
{ "CanvasPage", typeof(CanvasPage) }, { "CanvasPage", typeof(CanvasPage) },
{ "InkRecognitionPage", typeof(InkRecognitionPage) },
{ "DebugPage", typeof(IconographyPage) }, { "DebugPage", typeof(IconographyPage) },
{ "AboutPage", typeof(AboutPage) }, { "AboutPage", typeof(AboutPage) },
{ "Settings", typeof(SettingsPage) }, { "Settings", typeof(SettingsPage) },