From a8dcbd4af030da2ceb31a86a7d08972887ade3af Mon Sep 17 00:00:00 2001
From: CJK_mkp <113243675+CJKmkp@users.noreply.github.com>
Date: Sat, 8 Nov 2025 18:01:56 +0800
Subject: [PATCH] =?UTF-8?q?add:=E7=82=B9=E5=90=8D=E5=8E=86=E5=8F=B2?=
=?UTF-8?q?=E6=9F=A5=E7=9C=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Windows/NewStyleRollCallWindow.cs | 15 ++
.../Windows/NewStyleRollCallWindow.xaml | 14 +-
Ink Canvas/Windows/RollCallHistoryWindow.xaml | 46 +++++
.../Windows/RollCallHistoryWindow.xaml.cs | 184 ++++++++++++++++++
4 files changed, 258 insertions(+), 1 deletion(-)
create mode 100644 Ink Canvas/Windows/RollCallHistoryWindow.xaml
create mode 100644 Ink Canvas/Windows/RollCallHistoryWindow.xaml.cs
diff --git a/Ink Canvas/Windows/NewStyleRollCallWindow.cs b/Ink Canvas/Windows/NewStyleRollCallWindow.cs
index 84dec3a3..b80090d6 100644
--- a/Ink Canvas/Windows/NewStyleRollCallWindow.cs
+++ b/Ink Canvas/Windows/NewStyleRollCallWindow.cs
@@ -856,6 +856,21 @@ namespace Ink_Canvas
}
}
+ private void ViewHistory_Click(object sender, RoutedEventArgs e)
+ {
+ try
+ {
+ // 打开历史记录查看窗口
+ var historyWindow = new RollCallHistoryWindow();
+ historyWindow.ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"打开历史记录失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
+ LogHelper.WriteLogToFile($"打开历史记录失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
private void LoadNamesFromFile()
{
try
diff --git a/Ink Canvas/Windows/NewStyleRollCallWindow.xaml b/Ink Canvas/Windows/NewStyleRollCallWindow.xaml
index 2fd0d5e9..473ac152 100644
--- a/Ink Canvas/Windows/NewStyleRollCallWindow.xaml
+++ b/Ink Canvas/Windows/NewStyleRollCallWindow.xaml
@@ -418,7 +418,7 @@
Foreground="{DynamicResource NewRollCallWindowButtonForeground}"/>
+
diff --git a/Ink Canvas/Windows/RollCallHistoryWindow.xaml b/Ink Canvas/Windows/RollCallHistoryWindow.xaml
new file mode 100644
index 00000000..b2b92e71
--- /dev/null
+++ b/Ink Canvas/Windows/RollCallHistoryWindow.xaml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ink Canvas/Windows/RollCallHistoryWindow.xaml.cs b/Ink Canvas/Windows/RollCallHistoryWindow.xaml.cs
new file mode 100644
index 00000000..16c7bc0f
--- /dev/null
+++ b/Ink Canvas/Windows/RollCallHistoryWindow.xaml.cs
@@ -0,0 +1,184 @@
+using Ink_Canvas.Helpers;
+using System;
+using System.IO;
+using System.Linq;
+using System.Windows;
+using System.Windows.Media;
+using Newtonsoft.Json;
+using MessageBox = iNKORE.UI.WPF.Modern.Controls.MessageBox;
+
+namespace Ink_Canvas
+{
+ ///
+ /// Interaction logic for RollCallHistoryWindow.xaml
+ ///
+ public partial class RollCallHistoryWindow : Window
+ {
+ public RollCallHistoryWindow()
+ {
+ InitializeComponent();
+ AnimationsHelper.ShowWithSlideFromBottomAndFade(this, 0.25);
+ ApplyTheme();
+ }
+
+ private void Window_Loaded(object sender, RoutedEventArgs e)
+ {
+ LoadHistory();
+ }
+
+ private void LoadHistory()
+ {
+ try
+ {
+ string configsFolder = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs");
+ string historyJsonPath = System.IO.Path.Combine(configsFolder, "RollCallHistory.json");
+
+ if (!File.Exists(historyJsonPath))
+ {
+ TextBoxHistory.Text = "暂无历史记录";
+ return;
+ }
+
+ string jsonContent = File.ReadAllText(historyJsonPath);
+ var historyData = JsonConvert.DeserializeObject(jsonContent);
+
+ if (historyData == null || historyData.History == null || historyData.History.Count == 0)
+ {
+ TextBoxHistory.Text = "暂无历史记录";
+ return;
+ }
+
+ // 按时间倒序显示(最新的在上方)
+ // 由于历史记录是按时间顺序添加的,所以直接反转即可
+ var reversedHistory = historyData.History.ToList();
+ reversedHistory.Reverse();
+
+ // 显示历史记录,每行一个
+ TextBoxHistory.Text = string.Join(Environment.NewLine, reversedHistory);
+
+ // 显示统计信息
+ int totalCount = historyData.History.Count;
+ string lastUpdate = historyData.LastUpdate.ToString("yyyy-MM-dd HH:mm:ss");
+ string header = $"共 {totalCount} 条记录,最后更新:{lastUpdate}\n\n";
+ TextBoxHistory.Text = header + TextBoxHistory.Text;
+ }
+ catch (Exception ex)
+ {
+ TextBoxHistory.Text = $"加载历史记录失败: {ex.Message}";
+ LogHelper.WriteLogToFile($"加载点名历史记录失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+ Close();
+ }
+
+ private void ApplyTheme()
+ {
+ try
+ {
+ if (MainWindow.Settings != null)
+ {
+ ApplyTheme(MainWindow.Settings);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"应用历史记录窗口主题出错: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ private void ApplyTheme(Settings settings)
+ {
+ try
+ {
+ if (settings.Appearance.Theme == 0) // 浅色主题
+ {
+ iNKORE.UI.WPF.Modern.ThemeManager.SetRequestedTheme(this, iNKORE.UI.WPF.Modern.ElementTheme.Light);
+ ApplyThemeResources("Light");
+ }
+ else if (settings.Appearance.Theme == 1) // 深色主题
+ {
+ iNKORE.UI.WPF.Modern.ThemeManager.SetRequestedTheme(this, iNKORE.UI.WPF.Modern.ElementTheme.Dark);
+ ApplyThemeResources("Dark");
+ }
+ else // 跟随系统主题
+ {
+ bool isSystemLight = IsSystemThemeLight();
+ if (isSystemLight)
+ {
+ iNKORE.UI.WPF.Modern.ThemeManager.SetRequestedTheme(this, iNKORE.UI.WPF.Modern.ElementTheme.Light);
+ ApplyThemeResources("Light");
+ }
+ else
+ {
+ iNKORE.UI.WPF.Modern.ThemeManager.SetRequestedTheme(this, iNKORE.UI.WPF.Modern.ElementTheme.Dark);
+ ApplyThemeResources("Dark");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"应用历史记录窗口主题出错: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ private void ApplyThemeResources(string theme)
+ {
+ try
+ {
+ var resources = this.Resources;
+
+ if (theme == "Light")
+ {
+ // 应用浅色主题资源
+ resources["RollCallHistoryWindowBackground"] = new SolidColorBrush(Color.FromRgb(255, 255, 255));
+ resources["RollCallHistoryWindowForeground"] = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ resources["RollCallHistoryWindowButtonBackground"] = new SolidColorBrush(Color.FromRgb(244, 244, 245));
+ resources["RollCallHistoryWindowButtonForeground"] = new SolidColorBrush(Color.FromRgb(24, 24, 27));
+ resources["RollCallHistoryWindowBorderBrush"] = new SolidColorBrush(Color.FromRgb(228, 228, 231));
+ }
+ else
+ {
+ // 应用深色主题资源
+ resources["RollCallHistoryWindowBackground"] = new SolidColorBrush(Color.FromRgb(31, 31, 31)); // #1f1f1f
+ resources["RollCallHistoryWindowForeground"] = new SolidColorBrush(Colors.White);
+ resources["RollCallHistoryWindowButtonBackground"] = new SolidColorBrush(Color.FromRgb(42, 42, 42)); // #2a2a2a
+ resources["RollCallHistoryWindowButtonForeground"] = new SolidColorBrush(Colors.White);
+ resources["RollCallHistoryWindowBorderBrush"] = new SolidColorBrush(Color.FromRgb(224, 224, 224)); // #E0E0E0
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"应用历史记录窗口主题资源出错: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ private bool IsSystemThemeLight()
+ {
+ var light = false;
+ try
+ {
+ var registryKey = Microsoft.Win32.Registry.CurrentUser;
+ var themeKey = registryKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize");
+ if (themeKey != null)
+ {
+ var value = themeKey.GetValue("AppsUseLightTheme");
+ if (value != null)
+ {
+ light = (int)value == 1;
+ }
+ themeKey.Close();
+ }
+ }
+ catch
+ {
+ // 如果无法读取注册表,默认使用浅色主题
+ light = true;
+ }
+ return light;
+ }
+ }
+}
+