feat(FeedBack): 添加GitHub反馈选项和Markdown模板功能
- 在反馈窗口中新增第三页,提供GitHub问题反馈选项 - 添加Markdown模板生成功能,自动包含用户选择的环境和设备信息 - 实现复制反馈链接和模板的功能按钮 - 重构导航逻辑以支持三页切换 Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
This commit is contained in:
@@ -139,6 +139,76 @@
|
|||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</Grid>
|
</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 Header="复制反馈链接" IsClickEnabled="True" Click="CardCopyIssueUrl_Click">
|
||||||
|
<TextBox x:Name="TextBoxIssueUrl"
|
||||||
|
MaxWidth="400"
|
||||||
|
Text="https://github.com/InkCanvasForClass/community/issues/new?template=01-bug_report.yml"
|
||||||
|
IsReadOnly="True"
|
||||||
|
BorderThickness="0"
|
||||||
|
Background="Transparent"
|
||||||
|
FontFamily="Consolas"
|
||||||
|
FontSize="12"
|
||||||
|
TextWrapping="Wrap"
|
||||||
|
AcceptsReturn="True"
|
||||||
|
HorizontalScrollBarVisibility="Auto"
|
||||||
|
VerticalScrollBarVisibility="Auto"
|
||||||
|
IsReadOnlyCaretVisible="False"
|
||||||
|
Foreground="{DynamicResource {x:Static ui:ThemeKeys.TextFillColorSecondaryBrushKey}}"
|
||||||
|
TextAlignment="Left"
|
||||||
|
VerticalAlignment="Center"/>
|
||||||
|
<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="# 问题描述
请描述您遇到的问题...

# 重现步骤
1. 
2. 
3. 

# 预期行为
请描述您期望的行为...

# 实际行为
请描述实际发生的...

# 环境信息
- 版本: 
- 系统: 
"/>
|
||||||
|
</ui:SettingsCard>
|
||||||
|
</ui:SettingsExpander.Items>
|
||||||
|
</ui:SettingsExpander>
|
||||||
|
</ikw:SimpleStackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
<Grid Grid.Row="1" VerticalAlignment="Bottom" Margin="0,20,0,0">
|
<Grid Grid.Row="1" VerticalAlignment="Bottom" Margin="0,20,0,0">
|
||||||
<ikw:SimpleStackPanel HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal" Spacing="12">
|
<ikw:SimpleStackPanel HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal" Spacing="12">
|
||||||
<Button x:Name="ButtonCancel" Content="取消" Width="100" Height="36" FontFamily="Microsoft YaHei UI" FontSize="14" Click="ButtonCancel_Click">
|
<Button x:Name="ButtonCancel" Content="取消" Width="100" Height="36" FontFamily="Microsoft YaHei UI" FontSize="14" Click="ButtonCancel_Click">
|
||||||
@@ -160,7 +230,7 @@
|
|||||||
</Style>
|
</Style>
|
||||||
</Button.Style>
|
</Button.Style>
|
||||||
</Button>
|
</Button>
|
||||||
<Button x:Name="ButtonSubmit" Content="提交反馈" Width="120" Height="36" FontFamily="Microsoft YaHei UI" FontSize="14" FontWeight="SemiBold" Click="ButtonSubmit_Click" Visibility="Collapsed">
|
<Button x:Name="ButtonConfirm" Content="下一步" Width="120" Height="36" FontFamily="Microsoft YaHei UI" FontSize="14" FontWeight="SemiBold" Click="ButtonConfirm_Click" Visibility="Collapsed">
|
||||||
<Button.Style>
|
<Button.Style>
|
||||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Static ui:ThemeKeys.AccentButtonStyleKey}}"/>
|
<Style TargetType="Button" BasedOn="{StaticResource {x:Static ui:ThemeKeys.AccentButtonStyleKey}}"/>
|
||||||
</Button.Style>
|
</Button.Style>
|
||||||
|
|||||||
@@ -247,12 +247,24 @@ namespace Ink_Canvas
|
|||||||
|
|
||||||
private void ButtonBack_Click(object sender, RoutedEventArgs e)
|
private void ButtonBack_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Page1.Visibility = Visibility.Visible;
|
if (Page3.Visibility == Visibility.Visible)
|
||||||
Page2.Visibility = Visibility.Collapsed;
|
{
|
||||||
ButtonCancel.Visibility = Visibility.Visible;
|
Page3.Visibility = Visibility.Collapsed;
|
||||||
ButtonNext.Visibility = Visibility.Visible;
|
Page2.Visibility = Visibility.Visible;
|
||||||
ButtonBack.Visibility = Visibility.Collapsed;
|
ButtonCancel.Visibility = Visibility.Collapsed;
|
||||||
ButtonSubmit.Visibility = Visibility.Collapsed;
|
ButtonNext.Visibility = Visibility.Collapsed;
|
||||||
|
ButtonBack.Visibility = Visibility.Visible;
|
||||||
|
ButtonConfirm.Visibility = Visibility.Visible;
|
||||||
|
}
|
||||||
|
else if (Page2.Visibility == Visibility.Visible)
|
||||||
|
{
|
||||||
|
Page2.Visibility = Visibility.Collapsed;
|
||||||
|
Page1.Visibility = Visibility.Visible;
|
||||||
|
ButtonCancel.Visibility = Visibility.Visible;
|
||||||
|
ButtonNext.Visibility = Visibility.Visible;
|
||||||
|
ButtonBack.Visibility = Visibility.Collapsed;
|
||||||
|
ButtonConfirm.Visibility = Visibility.Collapsed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ButtonNext_Click(object sender, RoutedEventArgs e)
|
private void ButtonNext_Click(object sender, RoutedEventArgs e)
|
||||||
@@ -349,7 +361,7 @@ namespace Ink_Canvas
|
|||||||
ButtonCancel.Visibility = Visibility.Collapsed;
|
ButtonCancel.Visibility = Visibility.Collapsed;
|
||||||
ButtonNext.Visibility = Visibility.Collapsed;
|
ButtonNext.Visibility = Visibility.Collapsed;
|
||||||
ButtonBack.Visibility = Visibility.Visible;
|
ButtonBack.Visibility = Visibility.Visible;
|
||||||
ButtonSubmit.Visibility = Visibility.Visible;
|
ButtonConfirm.Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -357,7 +369,71 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ButtonSubmit_Click(object sender, RoutedEventArgs e)
|
private void ButtonConfirm_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
GenerateMarkdownTemplate();
|
||||||
|
Page2.Visibility = Visibility.Collapsed;
|
||||||
|
Page3.Visibility = Visibility.Visible;
|
||||||
|
ButtonCancel.Visibility = Visibility.Visible;
|
||||||
|
ButtonNext.Visibility = Visibility.Collapsed;
|
||||||
|
ButtonBack.Visibility = Visibility.Visible;
|
||||||
|
ButtonConfirm.Visibility = Visibility.Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GenerateMarkdownTemplate()
|
||||||
|
{
|
||||||
|
string template = "## 环境信息\n";
|
||||||
|
|
||||||
|
if (CheckAppVersion.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += $"- 软件版本: {_appVersion}\n";
|
||||||
|
}
|
||||||
|
if (CheckUpdateChannel.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += $"- 更新通道: {_updateChannel}\n";
|
||||||
|
}
|
||||||
|
if (CheckOSVersion.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += $"- 操作系统: {_osVersion}\n";
|
||||||
|
}
|
||||||
|
if (CheckNetVersion.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += $"- .NET 版本: {_netVersion}\n";
|
||||||
|
}
|
||||||
|
if (CheckTouchSupport.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += $"- 触控支持: {_touchSupport}\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
template += "\n## 设备信息\n";
|
||||||
|
if (CheckDeviceId.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += $"- 设备ID: {_deviceId}\n";
|
||||||
|
}
|
||||||
|
if (CheckFanceId.IsChecked == true && !string.IsNullOrEmpty(_telemetryId))
|
||||||
|
{
|
||||||
|
template += $"- 遥测ID: {_telemetryId}\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CheckPPTLinkage.IsChecked == true || CheckInkRecognition.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += "\n## 软件配置\n";
|
||||||
|
if (CheckPPTLinkage.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += "### PPT联动设置\n";
|
||||||
|
template += _pptLinkageSettings + "\n";
|
||||||
|
}
|
||||||
|
if (CheckInkRecognition.IsChecked == true)
|
||||||
|
{
|
||||||
|
template += "### 墨迹识别设置\n";
|
||||||
|
template += _inkRecognitionSettings + "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextBoxMarkdownTemplate.Text = template;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BtnOpenGitHubIssue_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -457,5 +533,112 @@ namespace Ink_Canvas
|
|||||||
System.Diagnostics.Debug.WriteLine($"打开反馈链接失败: {ex.Message}");
|
System.Diagnostics.Debug.WriteLine($"打开反馈链接失败: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CardCopyIssueUrl_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string versionInfo = "";
|
||||||
|
string systemInfo = "";
|
||||||
|
|
||||||
|
if (CheckAppVersion.IsChecked == true || CheckUpdateChannel.IsChecked == true)
|
||||||
|
{
|
||||||
|
if (CheckAppVersion.IsChecked == true)
|
||||||
|
{
|
||||||
|
versionInfo += _appVersion;
|
||||||
|
}
|
||||||
|
if (CheckUpdateChannel.IsChecked == true)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(versionInfo))
|
||||||
|
{
|
||||||
|
versionInfo += " ";
|
||||||
|
}
|
||||||
|
versionInfo += $"({_updateChannel})";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CheckOSVersion.IsChecked == true || CheckNetVersion.IsChecked == true || CheckTouchSupport.IsChecked == true)
|
||||||
|
{
|
||||||
|
if (CheckOSVersion.IsChecked == true)
|
||||||
|
{
|
||||||
|
systemInfo += _osVersion;
|
||||||
|
}
|
||||||
|
if (CheckNetVersion.IsChecked == true)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(systemInfo))
|
||||||
|
{
|
||||||
|
systemInfo += " | ";
|
||||||
|
}
|
||||||
|
systemInfo += _netVersion;
|
||||||
|
}
|
||||||
|
if (CheckTouchSupport.IsChecked == true)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(systemInfo))
|
||||||
|
{
|
||||||
|
systemInfo += " | ";
|
||||||
|
}
|
||||||
|
systemInfo += $"触控:{_touchSupport}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string url = "https://github.com/InkCanvasForClass/community/issues/new?template=01-bug_report.yml";
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(versionInfo))
|
||||||
|
{
|
||||||
|
url += $"&version={Uri.EscapeDataString(versionInfo)}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(systemInfo))
|
||||||
|
{
|
||||||
|
url += $"&os={Uri.EscapeDataString(systemInfo)}";
|
||||||
|
}
|
||||||
|
|
||||||
|
string extraInfo = "";
|
||||||
|
if (CheckDeviceId.IsChecked == true)
|
||||||
|
{
|
||||||
|
extraInfo += $"设备ID: {_deviceId}\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CheckFanceId.IsChecked == true)
|
||||||
|
{
|
||||||
|
extraInfo += $"遥测ID: {_telemetryId}\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CheckPPTLinkage.IsChecked == true)
|
||||||
|
{
|
||||||
|
extraInfo += "\nPPT联动设置:\n";
|
||||||
|
extraInfo += _pptLinkageSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CheckInkRecognition.IsChecked == true)
|
||||||
|
{
|
||||||
|
extraInfo += "\n墨迹识别设置:\n";
|
||||||
|
extraInfo += _inkRecognitionSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(extraInfo))
|
||||||
|
{
|
||||||
|
url += $"&extra={Uri.EscapeDataString(extraInfo)}";
|
||||||
|
}
|
||||||
|
|
||||||
|
Clipboard.SetText(url);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"复制反馈链接失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BtnCopyMarkdown_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Clipboard.SetText(TextBoxMarkdownTemplate.Text);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Debug.WriteLine($"复制Markdown模板失败: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user