Files
community/Ink Canvas/Windows/OobeWindow.xaml
T
2026-05-01 01:49:56 +08:00

522 lines
32 KiB
XML

<Window x:Class="Ink_Canvas.Windows.OobeWindow"
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"
xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="欢迎使用 InkCanvasForClass"
Height="660"
Width="980"
MinHeight="460"
MinWidth="760"
WindowStartupLocation="CenterScreen"
ResizeMode="CanResize"
Topmost="True"
Loaded="OobeWindow_OnLoaded"
ui:ThemeManager.IsThemeAware="True"
ui:TitleBar.ExtendViewIntoTitleBar="True"
ui:WindowHelper.SystemBackdropType="Mica"
ui:WindowHelper.UseModernWindowStyle="True"
ui:TitleBar.Height="48">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ui:ThemeResources CanBeAccessedAcrossThreads="True">
<ui:ThemeResources.ThemeDictionaries />
</ui:ThemeResources>
</ResourceDictionary.MergedDictionaries>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
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>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 自定义标题栏 -->
<Border x:Name="AppTitleBar"
Grid.Row="0"
Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Path=(ui:TitleBar.Height)}"
Background="Transparent">
<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="欢迎使用 InkCanvasForClass"
TextWrapping="NoWrap" />
</ikw:SimpleStackPanel>
</Grid>
</Border>
<!-- 顶部 Banner: 标题 + 步骤芯片 -->
<Border Grid.Row="1"
x:Name="HeaderBanner"
Padding="56,16,56,18"
BorderThickness="0,0,0,1"
BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#1F3B82F6" Offset="0" />
<GradientStop Color="#0A8B5CF6" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Border Grid.Column="0" Grid.RowSpan="3"
Width="56" Height="56"
Margin="0,0,18,0"
VerticalAlignment="Top"
CornerRadius="12"
Background="{DynamicResource SystemControlBackgroundChromeMediumBrush}">
<ui:FontIcon x:Name="StepIcon"
FontSize="28"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Icon="{x:Static ui:SegoeFluentIcons.Shield}" />
</Border>
<TextBlock Grid.Column="1" Grid.Row="0"
x:Name="StepIndicatorText"
Style="{DynamicResource CaptionTextBlockStyle}"
Opacity="0.75"
Text="步骤 1 / 12" />
<TextBlock Grid.Column="1" Grid.Row="1"
x:Name="StepTitleText"
Style="{DynamicResource TitleTextBlockStyle}"
Margin="0,2,0,0"
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="遥测、自动更新与启动行为,对应 设置 → 启动、隐私。" />
</Grid>
</Border>
<!-- 步骤内容(带切换动画) -->
<Grid Grid.Row="2" ClipToBounds="True">
<ScrollViewer x:Name="StepScrollViewer"
PanningMode="VerticalFirst"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<Grid Margin="56,18,56,0">
<ikw:SimpleStackPanel x:Name="StepHost"
MaxWidth="1000"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<ikw:SimpleStackPanel.RenderTransform>
<TranslateTransform x:Name="StepHostTransform" X="0" Y="0" />
</ikw:SimpleStackPanel.RenderTransform>
<!-- 步骤 1:启动 / 隐私 -->
<ikw:SimpleStackPanel x:Name="StepTelemetryPanel"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="匿名使用数据与隐私" />
<ui:SettingsExpander Header="匿名使用数据与隐私"
Description="完全匿名的使用统计,仅用于改进软件稳定性与性能。无论选择哪一项,课堂核心功能均可正常使用。"
IsExpanded="True">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Shield}" />
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard ContentAlignment="Left">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="4" VerticalAlignment="Center">
<CheckBox x:Name="CheckBoxPrivacyAccepted"
VerticalAlignment="Center"
Checked="CheckBoxPrivacyAccepted_Changed"
Unchecked="CheckBoxPrivacyAccepted_Changed"
Content="我已阅读并同意" />
<ui:HyperlinkButton Content="《隐私协议》"
Padding="4,0"
VerticalAlignment="Center"
Click="HyperlinkPrivacy_Click" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="遥测级别"
Description="本软件不会收集课堂内容、学生个人信息或可识别的原始墨迹。详细请见 privacy.txt。">
<ComboBox x:Name="ComboBoxTelemetryUploadLevel" MinWidth="220">
<ComboBoxItem Content="不上传任何匿名使用数据" />
<ComboBoxItem Content="基础(崩溃信息、版本与系统信息)" />
<ComboBoxItem Content="可选(功能使用频率等)" />
</ComboBox>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Margin="1,18,0,6"
Text="启动行为" />
<controls:LabeledSettingsCard x:Name="CardFoldAtStartup"
Header="启动时收纳到屏幕边缘"
Description="启动后将浮动工具栏自动隐藏到屏幕边缘。"
Icon="{x:Static ui:SegoeFluentIcons.ChevronLeft}"
SwitchName="ToggleSwitchFoldAtStartup" />
<controls:LabeledSettingsCard x:Name="CardAutoUpdate"
Header="自动检查更新"
Description="允许后台检查更新并下载新版本。"
Icon="{x:Static ui:SegoeFluentIcons.Sync}"
SwitchName="ToggleSwitchAutoUpdate" />
</ikw:SimpleStackPanel>
<!-- 步骤 2:画板和墨迹 -->
<ikw:SimpleStackPanel x:Name="StepCanvasPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="画板与墨迹" />
<controls:LabeledSettingsCard x:Name="CardShowCursor"
Header="显示画笔光标"
Description="绘制时显示光标位置。"
Icon="{x:Static ui:SegoeFluentIcons.TouchPointer}"
SwitchName="ToggleSwitchShowCursor" />
<controls:LabeledSettingsCard x:Name="CardDisablePressure"
Header="屏蔽压感"
Description="所有笔画统一粗细,不再受压力影响。"
Icon="{x:Static ui:SegoeFluentIcons.Edit}"
SwitchName="ToggleSwitchDisablePressure" />
<controls:LabeledSettingsCard x:Name="CardHideStrokeWhenSelecting"
Header="退出画板模式时隐藏墨迹"
Description="进入 PPT 非批注模式时不显示墨迹。"
Icon="{x:Static ui:SegoeFluentIcons.Hide}"
SwitchName="ToggleSwitchHideStrokeWhenSelecting" />
</ikw:SimpleStackPanel>
<!-- 步骤 3:手势操作 -->
<ikw:SimpleStackPanel x:Name="StepGesturesPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="手势操作" />
<controls:LabeledSettingsCard x:Name="CardTwoFingerZoom"
Header="启用双指缩放"
Icon="{x:Static ui:SegoeFluentIcons.View}"
SwitchName="ToggleSwitchTwoFingerZoom" />
<controls:LabeledSettingsCard x:Name="CardTwoFingerTranslate"
Header="启用双指平移"
Icon="{x:Static ui:SegoeFluentIcons.Touch}"
SwitchName="ToggleSwitchTwoFingerTranslate" />
<controls:LabeledSettingsCard x:Name="CardAutoSwitchTwoFingerGesture"
Header="进出白板模式时自动切换双指手势"
Icon="{x:Static ui:SegoeFluentIcons.Switch}"
SwitchName="ToggleSwitchAutoSwitchTwoFingerGesture" />
<controls:LabeledSettingsCard x:Name="CardEnablePalmEraser"
Header="启用手掌擦"
Description="多触点且接触面积较大时临时切换为橡皮。"
Icon="{x:Static ui:SegoeFluentIcons.EraseTool}"
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:个性化 -->
<ikw:SimpleStackPanel x:Name="StepAppearancePanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="主题" />
<ui:SettingsCard Header="应用主题"
Description="可在 设置 → 个性化 中随时修改。">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Personalize}" />
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxTheme" MinWidth="160">
<ComboBoxItem Content="浅色" />
<ComboBoxItem Content="深色" />
<ComboBoxItem Content="跟随系统" />
</ComboBox>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardEnableSplashScreen"
Header="启用启动动画"
Description="首次启动时显示全屏欢迎页。"
Icon="{x:Static ui:SegoeFluentIcons.Photo}"
SwitchName="ToggleSwitchEnableSplashScreen" />
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Margin="1,18,0,6"
Text="托盘与快速面板" />
<controls:LabeledSettingsCard x:Name="CardEnableTrayIcon"
Header="在系统托盘显示图标"
Description="方便后台快速唤出 InkCanvasForClass。"
Icon="{x:Static ui:SegoeFluentIcons.Pin}"
SwitchName="ToggleSwitchEnableTrayIcon" />
<controls:LabeledSettingsCard x:Name="CardShowQuickPanel"
Header="启用快速面板"
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}"
Text="快捷键" />
<controls:LabeledSettingsCard x:Name="CardEnableHotkeysInMouseMode"
Header="鼠标模式下启用全局快捷键"
Description="具体快捷键可在 设置 → 个性化 中调整。"
Icon="{x:Static ui:SegoeFluentIcons.PenWorkspace}"
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 -->
<ikw:SimpleStackPanel x:Name="StepPptPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="PowerPoint 联动" />
<controls:LabeledSettingsCard x:Name="CardPptSupport"
Header="启用与 PowerPoint / WPS 的联动"
Description="在幻灯片中一键呼出画板。"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
SwitchName="ToggleSwitchPptSupport" />
<controls:LabeledSettingsCard x:Name="CardPptAutoSaveStrokes"
Header="放映中自动保存墨迹"
Description="避免误关丢失板书。"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
SwitchName="ToggleSwitchPptAutoSaveStrokes" />
<controls:LabeledSettingsCard x:Name="CardPptAutoSaveScreenshots"
Header="放映中自动保存截屏"
Description="用于事后回看课堂内容。"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
SwitchName="ToggleSwitchPptAutoSaveScreenshots" />
<controls:LabeledSettingsCard x:Name="CardPptTimeCapsule"
Header="启用 PPT 时间胶囊"
Description="放映时显示时间提醒。"
Icon="{x:Static ui:SegoeFluentIcons.QuietHours}"
SwitchName="ToggleSwitchPptTimeCapsule" />
</ikw:SimpleStackPanel>
<!-- 步骤 9:自动化 -->
<ikw:SimpleStackPanel x:Name="StepAutomationPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="自动化行为" />
<controls:LabeledSettingsCard x:Name="CardAutoFoldInPPTSlideShow"
Header="进入 PPT 放映时自动收纳"
Icon="{x:Static ui:SegoeFluentIcons.ChevronLeft}"
SwitchName="ToggleSwitchAutoFoldInPPTSlideShow" />
<controls:LabeledSettingsCard x:Name="CardEnableAutoSaveStrokes"
Header="启用墨迹自动保存"
Description="定时将墨迹保存到本地。"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
SwitchName="ToggleSwitchEnableAutoSaveStrokes" />
<controls:LabeledSettingsCard x:Name="CardFloatingWindowInterceptor"
Header="启用悬浮窗拦截"
Description="拦截希沃、鸿合等课堂软件的悬浮窗,避免遮挡画板。"
Icon="{x:Static ui:SegoeFluentIcons.Cancel}"
SwitchName="ToggleSwitchFloatingWindowInterceptor" />
</ikw:SimpleStackPanel>
<!-- 步骤 10:随机点名 -->
<ikw:SimpleStackPanel x:Name="StepLuckyRandomPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="随机点名" />
<controls:LabeledSettingsCard x:Name="CardShowRandomAndSingleDraw"
Header="显示随机抽和单次抽按钮"
Icon="{x:Static ui:SegoeFluentIcons.People}"
SwitchName="ToggleSwitchShowRandomAndSingleDraw" />
</ikw:SimpleStackPanel>
<!-- 步骤 11:高级 -->
<ikw:SimpleStackPanel x:Name="StepAdvancedPanel"
Spacing="{StaticResource SettingsCardSpacing}"
Visibility="Collapsed">
<TextBlock Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"
Text="高级选项" />
<controls:LabeledSettingsCard x:Name="CardIsLogEnabled"
Header="启用日志"
Description="便于问题排查与反馈。"
Icon="{x:Static ui:SegoeFluentIcons.Document}"
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>
</ScrollViewer>
</Grid>
<!-- Footer -->
<Border Grid.Row="3"
Padding="56,12,56,16"
BorderThickness="0,1,0,0"
BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<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}" />
<Border x:Name="ProgressFill"
Height="4"
CornerRadius="2"
HorizontalAlignment="Left"
Background="{DynamicResource SystemControlForegroundAccentBrush}" />
</Grid>
<TextBlock Grid.Column="1"
x:Name="FooterStepText"
VerticalAlignment="Center"
Margin="0,0,16,0"
Style="{DynamicResource CaptionTextBlockStyle}"
Opacity="0.7"
Text="1 / 12" />
<Button x:Name="BtnPreviousStep"
Grid.Column="2"
MinWidth="96"
Height="32"
Margin="0,0,8,0"
Click="BtnPreviousStep_Click">
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="6">
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Back}" FontSize="12" />
<TextBlock Text="上一步" />
</ikw:SimpleStackPanel>
</Button>
<Button x:Name="BtnConfirm"
Grid.Column="3"
MinWidth="140"
Height="32"
Style="{DynamicResource AccentButtonStyle}"
Click="BtnConfirm_Click">
<ikw:SimpleStackPanel x:Name="BtnConfirmContent" Orientation="Horizontal" Spacing="6">
<TextBlock x:Name="BtnConfirmText" Text="下一步" />
<ui:FontIcon x:Name="BtnConfirmIcon" Icon="{x:Static ui:SegoeFluentIcons.ChevronRight}" FontSize="12" />
</ikw:SimpleStackPanel>
</Button>
</Grid>
</Border>
</Grid>
</Window>