refactor(FeedBack): 将反馈页面拆分为独立组件并重构导航逻辑

将反馈窗口的三个页面拆分为独立的用户控件组件,使用Frame实现页面导航
重构按钮点击事件处理逻辑,简化状态管理
添加页面切换动画效果

Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
This commit is contained in:
doudou0720
2026-04-04 23:26:45 +08:00
parent 08f92685cb
commit 9bcdc56a45
8 changed files with 392 additions and 290 deletions
+11 -177
View File
@@ -6,6 +6,7 @@
xmlns:local="clr-namespace:Ink_Canvas"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:feedbackPages="clr-namespace:Ink_Canvas.Windows.FeedbackPages"
mc:Ignorable="d" Topmost="True" WindowStartupLocation="CenterScreen" ui:WindowHelper.UseModernWindowStyle="True"
ResizeMode="NoResize" ui:ThemeManager.RequestedTheme="Light"
Title="反馈问题 - Ink Canvas For Class CE" Height="550" Width="650" FontFamily="Microsoft YaHei UI">
@@ -15,183 +16,16 @@
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" x:Name="Page1">
<ikw:SimpleStackPanel Spacing="12">
<TextBlock FontSize="20" FontWeight="SemiBold" Margin="0,0,0,10" Text="选择要包含的信息"/>
<ui:SettingsExpander x:Name="ExpanderSoftware" Header="软件信息"
Description="选择要包含在反馈中的软件版本信息">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.AppIconDefault}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckAppVersion" IsChecked="True" Content="软件版本"/>
</ui:SettingsCard>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckUpdateChannel" IsChecked="True" Content="更新通道"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander x:Name="ExpanderSystem" Header="系统信息"
Description="选择要包含在反馈中的系统环境信息">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.PC1}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckOSVersion" IsChecked="True" Content="操作系统版本"/>
</ui:SettingsCard>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckNetVersion" IsChecked="True" Content=".NET Framework 版本"/>
</ui:SettingsCard>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckTouchSupport" IsChecked="True" Content="触控支持"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander x:Name="ExpanderDevice" Header="设备信息"
Description="选择要包含在反馈中的设备标识信息">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Devices2}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckDeviceId" IsChecked="False" Content="设备 ID"/>
</ui:SettingsCard>
<ui:SettingsCard x:Name="CardFanceId" ContentAlignment="Left">
<CheckBox x:Name="CheckFanceId" IsChecked="False" Content="遥测 ID" ToolTipService.ShowOnDisabled="True">
<CheckBox.ToolTip>
<ToolTip>
<TextBlock>暂无遥测 ID</TextBlock>
</ToolTip>
</CheckBox.ToolTip>
</CheckBox>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander x:Name="ExpanderConfiguration" Header="软件配置"
Description="选择要包含在反馈中的软件配置信息">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckPPTLinkage" IsChecked="True" Content="PPT 联动设置"/>
</ui:SettingsCard>
<ui:SettingsCard ContentAlignment="Left">
<CheckBox x:Name="CheckInkRecognition" IsChecked="True" Content="墨迹识别设置"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
</ikw:SimpleStackPanel>
</ScrollViewer>
<Grid Grid.Row="0" x:Name="Page2" Visibility="Collapsed">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<ikw:SimpleStackPanel Spacing="12" Margin="0,0,0,20">
<TextBlock FontSize="20" FontWeight="SemiBold" Margin="0,0,0,10" Text="确认要发送的信息"/>
<ui:SettingsCard Header="软件信息"
Description="将要包含在反馈中的软件版本信息">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.AppIconDefault}"/>
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Spacing="8">
<TextBlock x:Name="TextAppVersionInfo" Text="" FontSize="14" TextWrapping="Wrap"/>
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="系统信息"
Description="将要包含在反馈中的系统环境信息">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.PC1}"/>
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Spacing="8">
<TextBlock x:Name="TextSystemInfo" Text="" FontSize="14" TextWrapping="Wrap"/>
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="设备信息"
Description="将要包含在反馈中的设备标识信息">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Devices2}"/>
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Spacing="8">
<TextBlock x:Name="TextDeviceInfo" Text="" FontSize="14" TextWrapping="Wrap"/>
<TextBlock x:Name="TextTelemetryInfo" Text="" FontSize="14" TextWrapping="Wrap" Visibility="Collapsed"/>
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard x:Name="CardConfiguration" Header="软件配置"
Description="将要包含在反馈中的软件配置信息">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Settings}"/>
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Spacing="8">
<TextBlock x:Name="TextConfigurationInfo" Text="" FontSize="14" TextWrapping="Wrap"/>
</ikw:SimpleStackPanel>
</ui:SettingsCard>
</ikw:SimpleStackPanel>
</ScrollViewer>
</Grid>
<Grid Grid.Row="0" x:Name="Page3" Visibility="Collapsed">
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
<ikw:SimpleStackPanel Spacing="12" Margin="0,0,0,20">
<TextBlock FontSize="20" FontWeight="SemiBold" Margin="0,0,0,10" Text="选择反馈方式"/>
<ui:SettingsExpander x:Name="ExpanderGitHubFeedback" Header="GitHub 问题反馈"
Description="在 GitHub 上提交问题反馈">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Mail}"/>
</ui:SettingsExpander.HeaderIcon>
<Button x:Name="BtnOpenGitHubIssue" Content="跳转到 GitHub 反馈" Click="BtnOpenGitHubIssue_Click">
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource {x:Static ui:ThemeKeys.AccentButtonStyleKey}}"/>
</Button.Style>
</Button>
<ui:SettingsExpander.Items>
<ui:SettingsCard x:Name="CardCopyIssueUrl" Header="复制反馈链接" IsClickEnabled="True" Click="CardCopyIssueUrl_Click">
<ui:SettingsCard.ActionIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Copy}"/>
</ui:SettingsCard.ActionIcon>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander x:Name="ExpanderMarkdownTemplate" Header="反馈模板 (Markdown)"
Description="复制以下 Markdown 模板进行反馈">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Code}"/>
</ui:SettingsExpander.HeaderIcon>
<Button x:Name="BtnCopyMarkdown" Content="复制模板" Click="BtnCopyMarkdown_Click">
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource {x:Static ui:ThemeKeys.DefaultButtonStyleKey}}"/>
</Button.Style>
</Button>
<ui:SettingsExpander.Items>
<ui:SettingsCard ContentAlignment="Left">
<TextBox x:Name="TextBoxMarkdownTemplate"
MinHeight="200"
IsReadOnly="True"
BorderThickness="0"
Background="Transparent"
FontFamily="Consolas"
FontSize="12"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
Text="# 问题描述&#x0a;请描述您遇到的问题...&#x0a;&#x0a;# 重现步骤&#x0a;1. &#x0a;2. &#x0a;3. &#x0a;&#x0a;# 预期行为&#x0a;请描述您期望的行为...&#x0a;&#x0a;# 实际行为&#x0a;请描述实际发生的...&#x0a;&#x0a;# 环境信息&#x0a;- 版本: &#x0a;- 系统: &#x0a;"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
</ikw:SimpleStackPanel>
</ScrollViewer>
</Grid>
<ui:Frame x:Name="ContentFrame" Grid.Row="0">
<ui:Frame.ContentTransitions>
<ui:TransitionCollection>
<ui:NavigationThemeTransition />
</ui:TransitionCollection>
</ui:Frame.ContentTransitions>
<ui:Frame.Content>
<feedbackPages:FeedbackPage1 x:Name="Page1"/>
</ui:Frame.Content>
</ui:Frame>
<Grid Grid.Row="1" VerticalAlignment="Bottom" Margin="0,20,0,0">
<ikw:SimpleStackPanel HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal" Spacing="12">