improve:计时器UI

This commit is contained in:
2025-10-18 16:15:19 +08:00
parent 0259d83429
commit ba5db63e0b
7 changed files with 232 additions and 40 deletions
@@ -39,7 +39,7 @@
Margin="0,0,20,0"/>
<!-- 冒号 -->
<TextBlock Text=":" FontSize="120" FontWeight="Bold"
<TextBlock x:Name="FullColon1Display" Text=":" FontSize="120" FontWeight="Bold"
Foreground="White"
HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,20,0"/>
@@ -61,7 +61,7 @@
Margin="0,0,20,0"/>
<!-- 冒号 -->
<TextBlock Text=":" FontSize="120" FontWeight="Bold"
<TextBlock x:Name="FullColon2Display" Text=":" FontSize="120" FontWeight="Bold"
Foreground="White"
HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,20,0"/>
@@ -136,6 +136,8 @@ namespace Ink_Canvas
// 更新秒显示
SetDigitDisplay("FullSecond1Display", seconds / 10, shouldShowRed);
SetDigitDisplay("FullSecond2Display", seconds % 10, shouldShowRed);
SetColonDisplay(shouldShowRed);
}
}
@@ -171,6 +173,40 @@ namespace Ink_Canvas
}
}
/// <summary>
/// 设置全屏窗口冒号显示颜色
/// </summary>
/// <param name="isRed">是否显示为红色</param>
private void SetColonDisplay(bool isRed = false)
{
var colon1 = this.FindName("FullColon1Display") as TextBlock;
var colon2 = this.FindName("FullColon2Display") as TextBlock;
if (colon1 != null)
{
if (isRed)
{
colon1.Foreground = Brushes.Red;
}
else
{
colon1.Foreground = Brushes.White;
}
}
if (colon2 != null)
{
if (isRed)
{
colon2.Foreground = Brushes.Red;
}
else
{
colon2.Foreground = Brushes.White;
}
}
}
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 点击屏幕退出全屏
+2 -2
View File
@@ -47,7 +47,7 @@
Margin="0,0,12,0"/>
<!-- 冒号 -->
<TextBlock Text=":" FontSize="48" FontWeight="Bold"
<TextBlock x:Name="MinColon1Display" Text=":" FontSize="48" FontWeight="Bold"
Foreground="{DynamicResource NewTimerWindowDigitForeground}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,12,0"/>
@@ -69,7 +69,7 @@
Margin="0,0,12,0"/>
<!-- 冒号 -->
<TextBlock Text=":" FontSize="48" FontWeight="Bold"
<TextBlock x:Name="MinColon2Display" Text=":" FontSize="48" FontWeight="Bold"
Foreground="{DynamicResource NewTimerWindowDigitForeground}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,12,0"/>
@@ -140,6 +140,8 @@ namespace Ink_Canvas
// 更新秒显示
SetDigitDisplay("MinSecond1Display", seconds / 10, shouldShowRed);
SetDigitDisplay("MinSecond2Display", seconds % 10, shouldShowRed);
SetColonDisplay(shouldShowRed);
}
}
@@ -184,6 +186,58 @@ namespace Ink_Canvas
}
}
/// <summary>
/// 设置最小化窗口冒号显示颜色
/// </summary>
/// <param name="isRed">是否显示为红色</param>
private void SetColonDisplay(bool isRed = false)
{
var colon1 = this.FindName("MinColon1Display") as TextBlock;
var colon2 = this.FindName("MinColon2Display") as TextBlock;
if (colon1 != null)
{
if (isRed)
{
colon1.Foreground = Brushes.Red;
}
else
{
var defaultBrush = this.FindResource("NewTimerWindowDigitForeground") as Brush;
if (defaultBrush != null)
{
colon1.Foreground = defaultBrush;
}
else
{
bool isLightTheme = IsLightTheme();
colon1.Foreground = isLightTheme ? Brushes.Black : Brushes.White;
}
}
}
if (colon2 != null)
{
if (isRed)
{
colon2.Foreground = Brushes.Red;
}
else
{
var defaultBrush = this.FindResource("NewTimerWindowDigitForeground") as Brush;
if (defaultBrush != null)
{
colon2.Foreground = defaultBrush;
}
else
{
bool isLightTheme = IsLightTheme();
colon2.Foreground = isLightTheme ? Brushes.Black : Brushes.White;
}
}
}
}
private void ApplyTheme()
{
try
+136 -34
View File
@@ -1,5 +1,6 @@
using Ink_Canvas.Helpers;
using System;
using System.IO;
using System.Media;
using System.Timers;
using System.Windows;
@@ -7,9 +8,23 @@ using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
using Newtonsoft.Json;
namespace Ink_Canvas
{
/// <summary>
/// 最近计时记录数据模型
/// </summary>
public class RecentTimersData
{
public string RecentTimer1 { get; set; } = "--:--";
public string RecentTimer2 { get; set; } = "--:--";
public string RecentTimer3 { get; set; } = "--:--";
public string RecentTimer4 { get; set; } = "--:--";
public string RecentTimer5 { get; set; } = "--:--";
public string RecentTimer6 { get; set; } = "--:--";
}
/// <summary>
/// 新计时器UI风格的倒计时器窗口
/// </summary>
@@ -65,6 +80,8 @@ namespace Ink_Canvas
SetDigitDisplay("Digit5Display", leftTimeSpan.Seconds / 10);
SetDigitDisplay("Digit6Display", leftTimeSpan.Seconds % 10);
SetColonDisplay(false);
if (leftTimeSpan.TotalSeconds <= 6 && leftTimeSpan.TotalSeconds > 0 &&
MainWindow.Settings.RandSettings?.EnableProgressiveReminder == true &&
!hasPlayedProgressiveReminder)
@@ -86,6 +103,8 @@ namespace Ink_Canvas
SetDigitDisplay("Digit4Display", 0);
SetDigitDisplay("Digit5Display", 0);
SetDigitDisplay("Digit6Display", 0);
SetColonDisplay(false);
timer.Stop();
isTimerRunning = false;
StartPauseIcon.Data = Geometry.Parse(PlayIconData);
@@ -111,6 +130,8 @@ namespace Ink_Canvas
SetDigitDisplay("Digit4Display", overtimeSpan.Minutes % 10, shouldShowRed);
SetDigitDisplay("Digit5Display", overtimeSpan.Seconds / 10, shouldShowRed);
SetDigitDisplay("Digit6Display", overtimeSpan.Seconds % 10, shouldShowRed);
SetColonDisplay(shouldShowRed);
}
});
}
@@ -158,13 +179,9 @@ namespace Ink_Canvas
private string recentTimer5 = "--:--";
private string recentTimer6 = "--:--";
// 最近计时记录的注册表键名
private const string RecentTimer1Key = "NewTimer_RecentTimer1";
private const string RecentTimer2Key = "NewTimer_RecentTimer2";
private const string RecentTimer3Key = "NewTimer_RecentTimer3";
private const string RecentTimer4Key = "NewTimer_RecentTimer4";
private const string RecentTimer5Key = "NewTimer_RecentTimer5";
private const string RecentTimer6Key = "NewTimer_RecentTimer6";
// JSON文件路径
private static readonly string ConfigsFolder = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Configs");
private static readonly string RecentTimersJsonPath = System.IO.Path.Combine(ConfigsFolder, "RecentTimers.json");
private void InitializeUI()
{
@@ -287,6 +304,8 @@ namespace Ink_Canvas
SetDigitDisplay("Digit4Display", minute % 10);
SetDigitDisplay("Digit5Display", second / 10);
SetDigitDisplay("Digit6Display", second % 10);
SetColonDisplay(false);
}
private void HideTimer_Elapsed(object sender, ElapsedEventArgs e)
@@ -433,7 +452,7 @@ namespace Ink_Canvas
/// <param name="isRed">是否显示为红色</param>
private void SetDigitDisplay(string pathName, int digit, bool isRed = false)
{
var path = this.FindName(pathName) as Path;
var path = this.FindName(pathName) as System.Windows.Shapes.Path;
if (path != null)
{
string resourceKey = $"Digit{digit}";
@@ -462,6 +481,56 @@ namespace Ink_Canvas
}
}
/// <summary>
/// 设置冒号显示颜色
/// </summary>
/// <param name="isRed">是否显示为红色</param>
private void SetColonDisplay(bool isRed = false)
{
var colon1 = this.FindName("Colon1Display") as TextBlock;
var colon2 = this.FindName("Colon2Display") as TextBlock;
if (colon1 != null)
{
if (isRed)
{
colon1.Foreground = Brushes.Red;
}
else
{
var defaultBrush = this.FindResource("NewTimerWindowDigitForeground") as Brush;
if (defaultBrush != null)
{
colon1.Foreground = defaultBrush;
}
else
{
colon1.Foreground = Brushes.White;
}
}
}
if (colon2 != null)
{
if (isRed)
{
colon2.Foreground = Brushes.Red;
}
else
{
var defaultBrush = this.FindResource("NewTimerWindowDigitForeground") as Brush;
if (defaultBrush != null)
{
colon2.Foreground = defaultBrush;
}
else
{
colon2.Foreground = Brushes.White;
}
}
}
}
// 第1位数字(小时十位)
private void Digit1Plus_Click(object sender, RoutedEventArgs e)
{
@@ -1144,27 +1213,53 @@ namespace Ink_Canvas
}
}
// 从注册表加载最近计时记录
// 从JSON文件加载最近计时记录
private void LoadRecentTimers()
{
try
{
using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\InkCanvas\NewTimer"))
// 确保Configs文件夹存在
if (!Directory.Exists(ConfigsFolder))
{
if (key != null)
{
recentTimer1 = key.GetValue(RecentTimer1Key, "--:--")?.ToString() ?? "--:--";
recentTimer2 = key.GetValue(RecentTimer2Key, "--:--")?.ToString() ?? "--:--";
recentTimer3 = key.GetValue(RecentTimer3Key, "--:--")?.ToString() ?? "--:--";
recentTimer4 = key.GetValue(RecentTimer4Key, "--:--")?.ToString() ?? "--:--";
recentTimer5 = key.GetValue(RecentTimer5Key, "--:--")?.ToString() ?? "--:--";
recentTimer6 = key.GetValue(RecentTimer6Key, "--:--")?.ToString() ?? "--:--";
}
Directory.CreateDirectory(ConfigsFolder);
}
if (!File.Exists(RecentTimersJsonPath))
{
recentTimer1 = "--:--";
recentTimer2 = "--:--";
recentTimer3 = "--:--";
recentTimer4 = "--:--";
recentTimer5 = "--:--";
recentTimer6 = "--:--";
return;
}
// 读取JSON文件
string jsonContent = File.ReadAllText(RecentTimersJsonPath);
var data = JsonConvert.DeserializeObject<RecentTimersData>(jsonContent);
if (data != null)
{
recentTimer1 = data.RecentTimer1 ?? "--:--";
recentTimer2 = data.RecentTimer2 ?? "--:--";
recentTimer3 = data.RecentTimer3 ?? "--:--";
recentTimer4 = data.RecentTimer4 ?? "--:--";
recentTimer5 = data.RecentTimer5 ?? "--:--";
recentTimer6 = data.RecentTimer6 ?? "--:--";
}
else
{
recentTimer1 = "--:--";
recentTimer2 = "--:--";
recentTimer3 = "--:--";
recentTimer4 = "--:--";
recentTimer5 = "--:--";
recentTimer6 = "--:--";
}
}
catch
catch (Exception ex)
{
// 如果读取注册表失败,使用默认值
recentTimer1 = "--:--";
recentTimer2 = "--:--";
recentTimer3 = "--:--";
@@ -1174,27 +1269,34 @@ namespace Ink_Canvas
}
}
// 保存最近计时记录到注册表
// 保存最近计时记录到JSON文件
private void SaveRecentTimersToRegistry()
{
try
{
using (var key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"Software\InkCanvas\NewTimer"))
// 确保Configs文件夹存在
if (!Directory.Exists(ConfigsFolder))
{
if (key != null)
{
key.SetValue(RecentTimer1Key, recentTimer1);
key.SetValue(RecentTimer2Key, recentTimer2);
key.SetValue(RecentTimer3Key, recentTimer3);
key.SetValue(RecentTimer4Key, recentTimer4);
key.SetValue(RecentTimer5Key, recentTimer5);
key.SetValue(RecentTimer6Key, recentTimer6);
}
Directory.CreateDirectory(ConfigsFolder);
}
// 创建数据对象
var data = new RecentTimersData
{
RecentTimer1 = recentTimer1,
RecentTimer2 = recentTimer2,
RecentTimer3 = recentTimer3,
RecentTimer4 = recentTimer4,
RecentTimer5 = recentTimer5,
RecentTimer6 = recentTimer6
};
// 序列化为JSON并保存到文件
string jsonContent = JsonConvert.SerializeObject(data, Formatting.Indented);
File.WriteAllText(RecentTimersJsonPath, jsonContent);
}
catch
catch (Exception)
{
// 如果保存到注册表失败,静默处理
}
}
+2 -2
View File
@@ -172,7 +172,7 @@
</Grid>
<!-- 冒号分隔符 -->
<TextBlock Text=":" FontSize="48" FontWeight="Bold"
<TextBlock x:Name="Colon1Display" Text=":" FontSize="48" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center"
Foreground="{DynamicResource NewTimerWindowDigitForeground}"
Margin="-20,0,0,0"/>
@@ -291,7 +291,7 @@
</Grid>
<!-- 冒号分隔符 -->
<TextBlock Text=":" FontSize="48" FontWeight="Bold"
<TextBlock x:Name="Colon2Display" Text=":" FontSize="48" FontWeight="Bold"
HorizontalAlignment="Center" VerticalAlignment="Center"
Foreground="{DynamicResource NewTimerWindowDigitForeground}"
Margin="-20,0,0,0"/>