improve:OOBE

This commit is contained in:
2026-05-01 08:39:36 +08:00
parent 8c2fc15d81
commit 17c0ecc0f5
4 changed files with 101 additions and 135 deletions
+58 -83
View File
@@ -38,15 +38,6 @@
TargetType="TextBlock">
<Setter Property="Margin" Value="1,2,0,6" />
</Style>
<Style x:Key="OobeStepChipStyle" TargetType="Border">
<Setter Property="Background" Value="Transparent" />
<Setter Property="CornerRadius" Value="9" />
<Setter Property="Padding" Value="10,3" />
<Setter Property="Margin" Value="0,0,4,0" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Opacity" Value="0.55" />
</Style>
</ResourceDictionary>
</Window.Resources>
@@ -62,7 +53,9 @@
<Border x:Name="AppTitleBar"
Grid.Row="0"
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=(ui:TitleBar.Height)}"
Background="Transparent">
Background="Transparent"
IsHitTestVisible="True"
Canvas.ZIndex="10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
@@ -80,10 +73,13 @@
Text="欢迎使用 InkCanvasForClass"
TextWrapping="NoWrap" />
</ikw:SimpleStackPanel>
<Rectangle Grid.Column="2"
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=(ui:TitleBar.SystemOverlayRightInset)}" />
</Grid>
</Border>
<!-- 顶部 Banner: 标题 + 步骤芯片 -->
<!-- 顶部 Banner -->
<Border Grid.Row="1"
x:Name="HeaderBanner"
Padding="56,16,56,18"
@@ -123,23 +119,23 @@
x:Name="StepIndicatorText"
Style="{DynamicResource CaptionTextBlockStyle}"
Opacity="0.75"
Text="步骤 1 / 12" />
Text="步骤 1 / 8" />
<TextBlock Grid.Column="1" Grid.Row="1"
x:Name="StepTitleText"
Style="{DynamicResource TitleTextBlockStyle}"
Margin="0,2,0,0"
Text="启动时行为" />
Text="启动与隐私" />
<TextBlock Grid.Column="1" Grid.Row="2"
x:Name="StepSubtitleText"
Style="{DynamicResource BodyTextBlockStyle}"
Margin="0,4,0,0"
Opacity="0.85"
TextWrapping="Wrap"
Text="遥测、自动更新与启动行为,对应 设置 → 启动、隐私。" />
Text="遥测、隐私协议、自动更新与崩溃处理。" />
</Grid>
</Border>
<!-- 步骤内容(带切换动画) -->
<!-- 步骤内容 -->
<Grid Grid.Row="2" ClipToBounds="True">
<ScrollViewer x:Name="StepScrollViewer"
PanningMode="VerticalFirst"
@@ -155,14 +151,14 @@
<TranslateTransform x:Name="StepHostTransform" X="0" Y="0" />
</ikw:SimpleStackPanel.RenderTransform>
<!-- 步骤 1:启动 / 隐私 -->
<!-- 步骤 1: 启动隐私 -->
<ikw:SimpleStackPanel x:Name="StepTelemetryPanel"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="匿名使用数据与隐私" />
<ui:SettingsExpander Header="匿名使用数据与隐私"
Description="完全匿名的使用统计,仅用于改进软件稳定性与性能。无论选择哪一项,课堂核心功能均可正常使用。"
Description="完全匿名的使用统计,仅用于改进软件稳定性与性能。"
IsExpanded="True">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Shield}" />
@@ -194,7 +190,7 @@
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Margin="1,18,0,6"
Text="启动行为" />
Text="启动与崩溃处理" />
<controls:LabeledSettingsCard x:Name="CardFoldAtStartup"
Header="启动时收纳到屏幕边缘"
@@ -207,9 +203,20 @@
Description="允许后台检查更新并下载新版本。"
Icon="{x:Static ui:SegoeFluentIcons.Sync}"
SwitchName="ToggleSwitchAutoUpdate" />
<ui:SettingsCard Header="发生未处理异常时"
Description="可在 设置 → 启动 中修改。">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Warning}" />
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxCrashAction" MinWidth="200">
<ComboBoxItem Content="静默重启软件(推荐)" />
<ComboBoxItem Content="无操作(仅记录日志)" />
</ComboBox>
</ui:SettingsCard>
</ikw:SimpleStackPanel>
<!-- 步骤 2:画板墨迹 -->
<!-- 步骤 2: 画板墨迹(含纠正) -->
<ikw:SimpleStackPanel x:Name="StepCanvasPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -233,9 +240,19 @@
Description="进入 PPT 非批注模式时不显示墨迹。"
Icon="{x:Static ui:SegoeFluentIcons.Hide}"
SwitchName="ToggleSwitchHideStrokeWhenSelecting" />
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Margin="1,18,0,6"
Text="墨迹纠正" />
<controls:LabeledSettingsCard x:Name="CardInkToShapeEnabled"
Header="启用墨迹识别"
Description="手绘图形自动转为标准形状。"
Icon="{x:Static ui:SegoeFluentIcons.Draw}"
SwitchName="ToggleSwitchInkToShapeEnabled" />
</ikw:SimpleStackPanel>
<!-- 步骤 3:手势操作 -->
<!-- 步骤 3: 手势 -->
<ikw:SimpleStackPanel x:Name="StepGesturesPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -264,21 +281,7 @@
SwitchName="ToggleSwitchEnablePalmEraser" />
</ikw:SimpleStackPanel>
<!-- 步骤 4:墨迹纠正 -->
<ikw:SimpleStackPanel x:Name="StepInkRecognitionPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="墨迹纠正" />
<controls:LabeledSettingsCard x:Name="CardInkToShapeEnabled"
Header="启用墨迹识别"
Description="手绘图形自动转为标准形状。"
Icon="{x:Static ui:SegoeFluentIcons.Draw}"
SwitchName="ToggleSwitchInkToShapeEnabled" />
</ikw:SimpleStackPanel>
<!-- 步骤 5:个性化 -->
<!-- 步骤 4: 个性化(主题 + 启动动画 + 托盘 + 快速面板 + 快捷键) -->
<ikw:SimpleStackPanel x:Name="StepAppearancePanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -318,13 +321,9 @@
Description="计时器、点名等常用工具的快速入口。"
Icon="{x:Static ui:SegoeFluentIcons.ViewAll}"
SwitchName="ToggleSwitchShowQuickPanel" />
</ikw:SimpleStackPanel>
<!-- 步骤 6:快捷键 -->
<ikw:SimpleStackPanel x:Name="StepShortcutsPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Margin="1,18,0,6"
Text="快捷键" />
<controls:LabeledSettingsCard x:Name="CardEnableHotkeysInMouseMode"
@@ -334,26 +333,7 @@
SwitchName="ToggleSwitchEnableHotkeysInMouseMode" />
</ikw:SimpleStackPanel>
<!-- 步骤 7:崩溃处理 -->
<ikw:SimpleStackPanel x:Name="StepCrashActionPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="崩溃处理" />
<ui:SettingsCard Header="发生未处理异常时"
Description="可在 设置 → 启动 中修改。">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Warning}" />
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxCrashAction" MinWidth="200">
<ComboBoxItem Content="静默重启软件(推荐)" />
<ComboBoxItem Content="无操作(仅记录日志)" />
</ComboBox>
</ui:SettingsCard>
</ikw:SimpleStackPanel>
<!-- 步骤 8:PowerPoint -->
<!-- 步骤 5: PowerPoint -->
<ikw:SimpleStackPanel x:Name="StepPptPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -385,7 +365,7 @@
SwitchName="ToggleSwitchPptTimeCapsule" />
</ikw:SimpleStackPanel>
<!-- 步骤 9:自动化 -->
<!-- 步骤 6: 自动化 + 截图 -->
<ikw:SimpleStackPanel x:Name="StepAutomationPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -408,9 +388,23 @@
Description="拦截希沃、鸿合等课堂软件的悬浮窗,避免遮挡画板。"
Icon="{x:Static ui:SegoeFluentIcons.Cancel}"
SwitchName="ToggleSwitchFloatingWindowInterceptor" />
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Margin="1,18,0,6"
Text="截图与屏幕捕捉" />
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtClear"
Header="清屏时自动保存截图"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
SwitchName="ToggleSwitchAutoSaveStrokesAtClear" />
<controls:LabeledSettingsCard x:Name="CardSaveScreenshotsInDateFolders"
Header="按日期分文件夹保存截图"
Icon="{x:Static ui:SegoeFluentIcons.Folder}"
SwitchName="ToggleSwitchSaveScreenshotsInDateFolders" />
</ikw:SimpleStackPanel>
<!-- 步骤 10:随机点名 -->
<!-- 步骤 7: 随机点名 -->
<ikw:SimpleStackPanel x:Name="StepLuckyRandomPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -423,7 +417,7 @@
SwitchName="ToggleSwitchShowRandomAndSingleDraw" />
</ikw:SimpleStackPanel>
<!-- 步骤 11:高级 -->
<!-- 步骤 8: 高级 -->
<ikw:SimpleStackPanel x:Name="StepAdvancedPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
@@ -437,24 +431,6 @@
SwitchName="ToggleSwitchIsLogEnabled" />
</ikw:SimpleStackPanel>
<!-- 步骤 12:截图与屏幕捕捉 -->
<ikw:SimpleStackPanel x:Name="StepSnapshotPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="截图和屏幕捕捉" />
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtClear"
Header="清屏时自动保存截图"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
SwitchName="ToggleSwitchAutoSaveStrokesAtClear" />
<controls:LabeledSettingsCard x:Name="CardSaveScreenshotsInDateFolders"
Header="按日期分文件夹保存截图"
Icon="{x:Static ui:SegoeFluentIcons.Folder}"
SwitchName="ToggleSwitchSaveScreenshotsInDateFolders" />
</ikw:SimpleStackPanel>
<Rectangle Height="32" />
</ikw:SimpleStackPanel>
</Grid>
@@ -474,7 +450,6 @@
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- 进度条 -->
<Grid Grid.Column="0" VerticalAlignment="Center" Margin="0,0,16,0" MaxWidth="420" HorizontalAlignment="Left">
<Border Height="4" CornerRadius="2"
Background="{DynamicResource SystemControlBackgroundChromeMediumLowBrush}" />
@@ -491,7 +466,7 @@
Margin="0,0,16,0"
Style="{DynamicResource CaptionTextBlockStyle}"
Opacity="0.7"
Text="1 / 12" />
Text="1 / 8" />
<Button x:Name="BtnPreviousStep"
Grid.Column="2"
+17 -41
View File
@@ -15,8 +15,8 @@ namespace Ink_Canvas.Windows
{
private readonly Settings _settings;
private int _currentStep = 0;
private const int MaxStepIndex = 11;
private const int StepCount = 12;
private const int MaxStepIndex = 7;
private const int StepCount = 8;
private FrameworkElement[] _stepPanels;
private static readonly TimeSpan SlideDuration = TimeSpan.FromMilliseconds(280);
@@ -36,15 +36,11 @@ namespace Ink_Canvas.Windows
StepTelemetryPanel,
StepCanvasPanel,
StepGesturesPanel,
StepInkRecognitionPanel,
StepAppearancePanel,
StepShortcutsPanel,
StepCrashActionPanel,
StepPptPanel,
StepAutomationPanel,
StepLuckyRandomPanel,
StepAdvancedPanel,
StepSnapshotPanel,
};
InitializeFromSettings();
@@ -409,65 +405,45 @@ namespace Ink_Canvas.Windows
switch (step)
{
case 0:
title = "启动时行为";
subtitle = "遥测、自动更新与启动行为,对应 设置 → 启动、隐私。";
title = "启动与隐私";
subtitle = "遥测、隐私协议、自动更新与崩溃处理。";
icon = SegoeFluentIcons.Shield;
break;
case 1:
title = "画板与墨迹";
subtitle = "画笔光标、压感、墨迹显示,对应 设置 → 画板。";
subtitle = "光标、压感、墨迹显示与墨迹纠正。";
icon = SegoeFluentIcons.Edit;
break;
case 2:
title = "手势操作";
subtitle = "双指缩放/平移、手掌擦等,对应 设置 → 画板。";
subtitle = "双指缩放/平移、手掌擦等。";
icon = SegoeFluentIcons.TouchPointer;
break;
case 3:
title = "墨迹纠正";
subtitle = "手绘图形识别为标准形状,对应 设置 → 墨迹纠正。";
icon = SegoeFluentIcons.Draw;
break;
case 4:
title = "个性化设置";
subtitle = "主题、启动动画、托盘与快速面板,对应 设置 → 个性化。";
title = "个性化";
subtitle = "主题、启动动画、托盘、快速面板与快捷键。";
icon = SegoeFluentIcons.Personalize;
break;
case 5:
title = "快捷键";
subtitle = "鼠标模式下的全局快捷键,对应 设置 → 个性化。";
icon = SegoeFluentIcons.PenWorkspace;
break;
case 6:
title = "崩溃处理";
subtitle = "未处理异常时的行为,对应 设置 → 启动。";
icon = SegoeFluentIcons.Warning;
break;
case 7:
case 4:
title = "PowerPoint 联动";
subtitle = "放映联动墨迹保存,对应 设置 → PowerPoint。";
subtitle = "放映联动墨迹与截屏自动保存、时间胶囊。";
icon = SegoeFluentIcons.Slideshow;
break;
case 8:
title = "自动化行为";
subtitle = "自动收纳、墨迹自动保存等,对应 设置 → 自动化。";
case 5:
title = "自动化与截图";
subtitle = "自动收纳、墨迹自动保存、悬浮窗拦截与截图保存。";
icon = SegoeFluentIcons.Sync;
break;
case 9:
case 6:
title = "随机点名";
subtitle = "点名窗口选项,对应 设置 → 随机点名。";
subtitle = "点名窗口选项。";
icon = SegoeFluentIcons.People;
break;
case 10:
case 7:
title = "高级选项";
subtitle = "日志等,对应 设置 → 高级。";
subtitle = "日志等高级配置。";
icon = SegoeFluentIcons.Settings;
break;
case 11:
title = "截图和屏幕捕捉";
subtitle = "清屏截图、按日期保存等,对应 设置 → 自动化。";
icon = SegoeFluentIcons.Camera;
break;
default:
title = string.Empty; subtitle = string.Empty; icon = SegoeFluentIcons.Home;
break;
+25 -10
View File
@@ -39,17 +39,32 @@
<!-- 标题栏 -->
<Border Grid.Row="0"
x:Name="AppTitleBar"
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=(ui:TitleBar.Height)}"
Background="Transparent">
<ikw:SimpleStackPanel Orientation="Horizontal"
Spacing="12"
VerticalAlignment="Center"
Margin="16,0,0,0">
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Shield}" FontSize="14" />
<TextBlock VerticalAlignment="Center"
Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=Title}"
TextWrapping="NoWrap" />
</ikw:SimpleStackPanel>
Background="Transparent"
IsHitTestVisible="True"
Canvas.ZIndex="10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="137" />
</Grid.ColumnDefinitions>
<ikw:SimpleStackPanel Grid.Column="0"
Orientation="Horizontal"
Spacing="12"
VerticalAlignment="Center"
Margin="16,0,0,0">
<Image Source="\Resources\icc.ico" Width="20"
RenderOptions.BitmapScalingMode="HighQuality" />
<TextBlock VerticalAlignment="Center"
Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=Title}"
TextWrapping="NoWrap" />
</ikw:SimpleStackPanel>
<Rectangle Grid.Column="2"
Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=(ui:TitleBar.SystemOverlayRightInset)}" />
</Grid>
</Border>
<!-- Banner Header -->
@@ -391,7 +391,7 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
Content = content,
PrimaryButtonText = "保存",
SecondaryButtonText = "取消",
Owner = GetMainWindow()
Owner = Window.GetWindow(this) ?? GetMainWindow()
};
var result = await dialog.ShowAsync();
if (result != ContentDialogResult.Primary) return;