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
@@ -0,0 +1,85 @@
<UserControl
x:Class="Ink_Canvas.Windows.FeedbackPages.FeedbackPage1"
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"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="600">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<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>
</UserControl>
@@ -0,0 +1,13 @@
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.FeedbackPages
{
public partial class FeedbackPage1 : UserControl
{
public FeedbackPage1()
{
InitializeComponent();
}
}
}
@@ -0,0 +1,57 @@
<UserControl
x:Class="Ink_Canvas.Windows.FeedbackPages.FeedbackPage2"
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"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="600">
<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>
</UserControl>
@@ -0,0 +1,13 @@
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.FeedbackPages
{
public partial class FeedbackPage2 : UserControl
{
public FeedbackPage2()
{
InitializeComponent();
}
}
}
@@ -0,0 +1,62 @@
<UserControl
x:Class="Ink_Canvas.Windows.FeedbackPages.FeedbackPage3"
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"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="600">
<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 反馈">
<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">
<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="复制模板">
<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>
</UserControl>
@@ -0,0 +1,21 @@
using System;
using System.Windows;
using System.Windows.Controls;
namespace Ink_Canvas.Windows.FeedbackPages
{
public partial class FeedbackPage3 : UserControl
{
public event EventHandler<RoutedEventArgs> BtnOpenGitHubIssueClick;
public event EventHandler<RoutedEventArgs> CardCopyIssueUrlClick;
public event EventHandler<RoutedEventArgs> BtnCopyMarkdownClick;
public FeedbackPage3()
{
InitializeComponent();
BtnOpenGitHubIssue.Click += (s, e) => BtnOpenGitHubIssueClick?.Invoke(this, e);
CardCopyIssueUrl.Click += (s, e) => CardCopyIssueUrlClick?.Invoke(this, e);
BtnCopyMarkdown.Click += (s, e) => BtnCopyMarkdownClick?.Invoke(this, e);
}
}
}
+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">
+130 -113
View File
@@ -1,4 +1,6 @@
using Ink_Canvas.Helpers;
using Ink_Canvas.Windows.FeedbackPages;
using iNKORE.UI.WPF.Modern.Media.Animation;
using OSVersionExtension;
using System;
using System.Diagnostics;
@@ -21,20 +23,32 @@ namespace Ink_Canvas
private string _inkRecognitionSettings = "";
private string _inkRecognitionEngine = "";
private FeedbackPage1 _page1;
private FeedbackPage2 _page2;
private FeedbackPage3 _page3;
private NavigationTransitionInfo _transitionInfo = new SlideNavigationTransitionInfo() { Effect = SlideNavigationTransitionEffect.FromRight };
public FeedbackWindow()
{
InitializeComponent();
_page1 = new FeedbackPage1();
_page2 = new FeedbackPage2();
_page3 = new FeedbackPage3();
_page3.BtnOpenGitHubIssueClick += BtnOpenGitHubIssue_Click;
_page3.CardCopyIssueUrlClick += CardCopyIssueUrl_Click;
_page3.BtnCopyMarkdownClick += BtnCopyMarkdown_Click;
ContentFrame.Navigated += ContentFrame_Navigated;
LoadInformation();
UpdateTextBlocks();
CheckTelemetryIdAvailability();
ContentFrame.Navigate(_page1);
}
private void UpdateTextBlocks()
private void ContentFrame_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
TextAppVersionInfo.Text = _appVersion;
TextSystemInfo.Text = $"{_osVersion} | {_netVersion} | 触控:{_touchSupport}";
TextDeviceInfo.Text = $"设备ID: {_deviceId}";
TextTelemetryInfo.Text = $"遥测ID: {_telemetryId}";
UpdateButtonVisibility();
}
private void LoadInformation()
@@ -213,17 +227,15 @@ namespace Ink_Canvas
bool hasTelemetryId = CheckTelemetryIdExists();
if (!hasTelemetryId)
{
CardFanceId.Visibility = Visibility.Visible;
CheckFanceId.IsChecked = false;
CheckFanceId.IsEnabled = false;
_page1.CheckFanceId.IsChecked = false;
_page1.CheckFanceId.IsEnabled = false;
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"检查遥测ID可用性失败: {ex.Message}");
CardFanceId.Visibility = Visibility.Visible;
CheckFanceId.IsChecked = false;
CheckFanceId.IsEnabled = false;
_page1.CheckFanceId.IsChecked = false;
_page1.CheckFanceId.IsEnabled = false;
}
}
@@ -247,42 +259,66 @@ namespace Ink_Canvas
private void ButtonBack_Click(object sender, RoutedEventArgs e)
{
if (Page3.Visibility == Visibility.Visible)
if (ContentFrame.BackStackDepth > 0)
{
Page3.Visibility = Visibility.Collapsed;
Page2.Visibility = Visibility.Visible;
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNext.Visibility = Visibility.Collapsed;
ButtonBack.Visibility = Visibility.Visible;
ButtonConfirm.Visibility = Visibility.Visible;
CardCopyIssueUrl.Header = "复制反馈链接";
BtnCopyMarkdown.Content = "复制模板";
ContentFrame.GoBack();
UpdateButtonVisibility();
}
else if (Page2.Visibility == Visibility.Visible)
}
private void ButtonNext_Click(object sender, RoutedEventArgs e)
{
UpdatePage2Info();
ContentFrame.Navigate(_page2, null, _transitionInfo);
UpdateButtonVisibility();
}
private void ButtonConfirm_Click(object sender, RoutedEventArgs e)
{
GenerateMarkdownTemplate();
ContentFrame.Navigate(_page3, null, _transitionInfo);
UpdateButtonVisibility();
}
private void UpdateButtonVisibility()
{
if (ContentFrame.Content == _page1)
{
Page2.Visibility = Visibility.Collapsed;
Page1.Visibility = Visibility.Visible;
ButtonCancel.Visibility = Visibility.Visible;
ButtonNext.Visibility = Visibility.Visible;
ButtonBack.Visibility = Visibility.Collapsed;
ButtonConfirm.Visibility = Visibility.Collapsed;
}
else if (ContentFrame.Content == _page2)
{
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNext.Visibility = Visibility.Collapsed;
ButtonBack.Visibility = Visibility.Visible;
ButtonConfirm.Visibility = Visibility.Visible;
}
else if (ContentFrame.Content == _page3)
{
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNext.Visibility = Visibility.Collapsed;
ButtonBack.Visibility = Visibility.Visible;
ButtonConfirm.Visibility = Visibility.Collapsed;
}
}
private void ButtonNext_Click(object sender, RoutedEventArgs e)
private void UpdatePage2Info()
{
try
{
string versionInfo = "";
string systemInfo = "";
if (CheckAppVersion.IsChecked == true || CheckUpdateChannel.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true || _page1.CheckUpdateChannel.IsChecked == true)
{
if (CheckAppVersion.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true)
{
versionInfo += _appVersion;
}
if (CheckUpdateChannel.IsChecked == true)
if (_page1.CheckUpdateChannel.IsChecked == true)
{
if (!string.IsNullOrEmpty(versionInfo))
{
@@ -292,13 +328,13 @@ namespace Ink_Canvas
}
}
if (CheckOSVersion.IsChecked == true || CheckNetVersion.IsChecked == true || CheckTouchSupport.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true || _page1.CheckNetVersion.IsChecked == true || _page1.CheckTouchSupport.IsChecked == true)
{
if (CheckOSVersion.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true)
{
systemInfo += _osVersion;
}
if (CheckNetVersion.IsChecked == true)
if (_page1.CheckNetVersion.IsChecked == true)
{
if (!string.IsNullOrEmpty(systemInfo))
{
@@ -306,7 +342,7 @@ namespace Ink_Canvas
}
systemInfo += _netVersion;
}
if (CheckTouchSupport.IsChecked == true)
if (_page1.CheckTouchSupport.IsChecked == true)
{
if (!string.IsNullOrEmpty(systemInfo))
{
@@ -316,139 +352,120 @@ namespace Ink_Canvas
}
}
TextAppVersionInfo.Text = versionInfo;
TextSystemInfo.Text = systemInfo;
_page2.TextAppVersionInfo.Text = versionInfo;
_page2.TextSystemInfo.Text = systemInfo;
if (CheckDeviceId.IsChecked == true)
if (_page1.CheckDeviceId.IsChecked == true)
{
TextDeviceInfo.Text = $"设备ID: {_deviceId}";
_page2.TextDeviceInfo.Text = $"设备ID: {_deviceId}";
}
else
{
TextDeviceInfo.Text = "设备ID: (不包含)";
_page2.TextDeviceInfo.Text = "设备ID: (不包含)";
}
if (CheckFanceId.IsChecked == true)
if (_page1.CheckFanceId.IsChecked == true)
{
TextTelemetryInfo.Text = $"遥测ID: {_telemetryId}";
TextTelemetryInfo.Visibility = Visibility.Visible;
_page2.TextTelemetryInfo.Text = $"遥测ID: {_telemetryId}";
_page2.TextTelemetryInfo.Visibility = Visibility.Visible;
}
else
{
TextTelemetryInfo.Text = "遥测ID: (不包含)";
TextTelemetryInfo.Visibility = Visibility.Visible;
_page2.TextTelemetryInfo.Text = "遥测ID: (不包含)";
_page2.TextTelemetryInfo.Visibility = Visibility.Visible;
}
// Display software configuration settings in the dedicated card
if (CheckPPTLinkage.IsChecked == true || CheckInkRecognition.IsChecked == true)
if (_page1.CheckPPTLinkage.IsChecked == true || _page1.CheckInkRecognition.IsChecked == true)
{
CardConfiguration.Visibility = Visibility.Visible;
TextConfigurationInfo.Text = "";
if (CheckPPTLinkage.IsChecked == true)
_page2.CardConfiguration.Visibility = Visibility.Visible;
_page2.TextConfigurationInfo.Text = "";
if (_page1.CheckPPTLinkage.IsChecked == true)
{
TextConfigurationInfo.Text += $"PPT联动设置:\n{_pptLinkageSettings}\n";
_page2.TextConfigurationInfo.Text += $"PPT联动设置:\n{_pptLinkageSettings}\n";
}
if (CheckInkRecognition.IsChecked == true)
if (_page1.CheckInkRecognition.IsChecked == true)
{
TextConfigurationInfo.Text += $"墨迹识别设置:\n{_inkRecognitionSettings}\n";
_page2.TextConfigurationInfo.Text += $"墨迹识别设置:\n{_inkRecognitionSettings}\n";
}
}
else
{
CardConfiguration.Visibility = Visibility.Collapsed;
_page2.CardConfiguration.Visibility = Visibility.Collapsed;
}
Page1.Visibility = Visibility.Collapsed;
Page2.Visibility = Visibility.Visible;
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNext.Visibility = Visibility.Collapsed;
ButtonBack.Visibility = Visibility.Visible;
ButtonConfirm.Visibility = Visibility.Visible;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"切换到第二页失败: {ex.Message}");
System.Diagnostics.Debug.WriteLine($"更新第二页信息失败: {ex.Message}");
}
}
private void ButtonConfirm_Click(object sender, RoutedEventArgs e)
{
GenerateMarkdownTemplate();
Page2.Visibility = Visibility.Collapsed;
Page3.Visibility = Visibility.Visible;
ButtonCancel.Visibility = Visibility.Collapsed;
ButtonNext.Visibility = Visibility.Collapsed;
ButtonBack.Visibility = Visibility.Visible;
ButtonConfirm.Visibility = Visibility.Collapsed;
}
private void GenerateMarkdownTemplate()
{
string template = "## 环境信息\n";
if (CheckAppVersion.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true)
{
template += $"- 软件版本: {_appVersion}\n";
}
if (CheckUpdateChannel.IsChecked == true)
if (_page1.CheckUpdateChannel.IsChecked == true)
{
template += $"- 更新通道: {_updateChannel}\n";
}
if (CheckOSVersion.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true)
{
template += $"- 操作系统: {_osVersion}\n";
}
if (CheckNetVersion.IsChecked == true)
if (_page1.CheckNetVersion.IsChecked == true)
{
template += $"- .NET 版本: {_netVersion}\n";
}
if (CheckTouchSupport.IsChecked == true)
if (_page1.CheckTouchSupport.IsChecked == true)
{
template += $"- 触控支持: {_touchSupport}\n";
}
template += "\n## 设备信息\n";
if (CheckDeviceId.IsChecked == true)
if (_page1.CheckDeviceId.IsChecked == true)
{
template += $"- 设备ID: {_deviceId}\n";
}
if (CheckFanceId.IsChecked == true && !string.IsNullOrEmpty(_telemetryId))
if (_page1.CheckFanceId.IsChecked == true && !string.IsNullOrEmpty(_telemetryId))
{
template += $"- 遥测ID: {_telemetryId}\n";
}
if (CheckPPTLinkage.IsChecked == true || CheckInkRecognition.IsChecked == true)
if (_page1.CheckPPTLinkage.IsChecked == true || _page1.CheckInkRecognition.IsChecked == true)
{
template += "\n## 软件配置\n";
if (CheckPPTLinkage.IsChecked == true)
if (_page1.CheckPPTLinkage.IsChecked == true)
{
template += "### PPT联动设置\n";
template += _pptLinkageSettings + "\n";
}
if (CheckInkRecognition.IsChecked == true)
if (_page1.CheckInkRecognition.IsChecked == true)
{
template += "### 墨迹识别设置\n";
template += _inkRecognitionSettings + "\n";
}
}
TextBoxMarkdownTemplate.Text = template;
_page3.TextBoxMarkdownTemplate.Text = template;
}
private void BtnOpenGitHubIssue_Click(object sender, RoutedEventArgs e)
public void BtnOpenGitHubIssue_Click(object sender, RoutedEventArgs e)
{
try
{
string versionInfo = "";
string systemInfo = "";
if (CheckAppVersion.IsChecked == true || CheckUpdateChannel.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true || _page1.CheckUpdateChannel.IsChecked == true)
{
if (CheckAppVersion.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true)
{
versionInfo += _appVersion;
}
if (CheckUpdateChannel.IsChecked == true)
if (_page1.CheckUpdateChannel.IsChecked == true)
{
if (!string.IsNullOrEmpty(versionInfo))
{
@@ -458,13 +475,13 @@ namespace Ink_Canvas
}
}
if (CheckOSVersion.IsChecked == true || CheckNetVersion.IsChecked == true || CheckTouchSupport.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true || _page1.CheckNetVersion.IsChecked == true || _page1.CheckTouchSupport.IsChecked == true)
{
if (CheckOSVersion.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true)
{
systemInfo += _osVersion;
}
if (CheckNetVersion.IsChecked == true)
if (_page1.CheckNetVersion.IsChecked == true)
{
if (!string.IsNullOrEmpty(systemInfo))
{
@@ -472,7 +489,7 @@ namespace Ink_Canvas
}
systemInfo += _netVersion;
}
if (CheckTouchSupport.IsChecked == true)
if (_page1.CheckTouchSupport.IsChecked == true)
{
if (!string.IsNullOrEmpty(systemInfo))
{
@@ -495,23 +512,23 @@ namespace Ink_Canvas
}
string extraInfo = "";
if (CheckDeviceId.IsChecked == true)
if (_page1.CheckDeviceId.IsChecked == true)
{
extraInfo += $"设备ID: {_deviceId}\n";
}
if (CheckFanceId.IsChecked == true)
if (_page1.CheckFanceId.IsChecked == true)
{
extraInfo += $"遥测ID: {_telemetryId}\n";
}
if (CheckPPTLinkage.IsChecked == true)
if (_page1.CheckPPTLinkage.IsChecked == true)
{
extraInfo += "\nPPT联动设置:\n";
extraInfo += _pptLinkageSettings;
}
if (CheckInkRecognition.IsChecked == true)
if (_page1.CheckInkRecognition.IsChecked == true)
{
extraInfo += "\n墨迹识别设置:\n";
extraInfo += _inkRecognitionSettings;
@@ -536,20 +553,20 @@ namespace Ink_Canvas
}
}
private void CardCopyIssueUrl_Click(object sender, RoutedEventArgs e)
public void CardCopyIssueUrl_Click(object sender, RoutedEventArgs e)
{
try
{
string versionInfo = "";
string systemInfo = "";
if (CheckAppVersion.IsChecked == true || CheckUpdateChannel.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true || _page1.CheckUpdateChannel.IsChecked == true)
{
if (CheckAppVersion.IsChecked == true)
if (_page1.CheckAppVersion.IsChecked == true)
{
versionInfo += _appVersion;
}
if (CheckUpdateChannel.IsChecked == true)
if (_page1.CheckUpdateChannel.IsChecked == true)
{
if (!string.IsNullOrEmpty(versionInfo))
{
@@ -559,13 +576,13 @@ namespace Ink_Canvas
}
}
if (CheckOSVersion.IsChecked == true || CheckNetVersion.IsChecked == true || CheckTouchSupport.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true || _page1.CheckNetVersion.IsChecked == true || _page1.CheckTouchSupport.IsChecked == true)
{
if (CheckOSVersion.IsChecked == true)
if (_page1.CheckOSVersion.IsChecked == true)
{
systemInfo += _osVersion;
}
if (CheckNetVersion.IsChecked == true)
if (_page1.CheckNetVersion.IsChecked == true)
{
if (!string.IsNullOrEmpty(systemInfo))
{
@@ -573,7 +590,7 @@ namespace Ink_Canvas
}
systemInfo += _netVersion;
}
if (CheckTouchSupport.IsChecked == true)
if (_page1.CheckTouchSupport.IsChecked == true)
{
if (!string.IsNullOrEmpty(systemInfo))
{
@@ -596,23 +613,23 @@ namespace Ink_Canvas
}
string extraInfo = "";
if (CheckDeviceId.IsChecked == true)
if (_page1.CheckDeviceId.IsChecked == true)
{
extraInfo += $"设备ID: {_deviceId}\n";
}
if (CheckFanceId.IsChecked == true)
if (_page1.CheckFanceId.IsChecked == true)
{
extraInfo += $"遥测ID: {_telemetryId}\n";
}
if (CheckPPTLinkage.IsChecked == true)
if (_page1.CheckPPTLinkage.IsChecked == true)
{
extraInfo += "\nPPT联动设置:\n";
extraInfo += _pptLinkageSettings;
}
if (CheckInkRecognition.IsChecked == true)
if (_page1.CheckInkRecognition.IsChecked == true)
{
extraInfo += "\n墨迹识别设置:\n";
extraInfo += _inkRecognitionSettings;
@@ -624,7 +641,7 @@ namespace Ink_Canvas
}
Clipboard.SetText(url);
CardCopyIssueUrl.Header = "已复制 ✓";
_page3.CardCopyIssueUrl.Header = "已复制 ✓";
}
catch (Exception ex)
{
@@ -632,12 +649,12 @@ namespace Ink_Canvas
}
}
private void BtnCopyMarkdown_Click(object sender, RoutedEventArgs e)
public void BtnCopyMarkdown_Click(object sender, RoutedEventArgs e)
{
try
{
Clipboard.SetText(TextBoxMarkdownTemplate.Text);
BtnCopyMarkdown.Content = "已复制 ✓";
Clipboard.SetText(_page3.TextBoxMarkdownTemplate.Text);
_page3.BtnCopyMarkdown.Content = "已复制 ✓";
}
catch (Exception ex)
{