From a18d47641509136e2dede6705b2810f8cf10238b Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 2 May 2026 00:53:49 +0800 Subject: [PATCH 01/19] =?UTF-8?q?add:=E5=9F=BA=E4=BA=8EIPC=E7=9A=84IACore?= =?UTF-8?q?=E5=9C=A8net6=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas.sln | 2 +- Ink Canvas/Helpers/IpcIACoreClient.cs | 2 +- Ink Canvas/InkCanvasForClass.csproj | 4 ++-- .../App.config | 0 .../InkCanvas.IACoreHelper.csproj | 17 +++++++++++++++-- .../IpcProtocol.cs | 2 +- .../Program.cs | 2 +- .../Properties/AssemblyInfo.cs | 4 ++-- 8 files changed, 23 insertions(+), 10 deletions(-) rename {InkCanvasForClass.IACoreHelper => InkCanvas.IACoreHelper}/App.config (100%) rename InkCanvasForClass.IACoreHelper/InkCanvasForClass.IACoreHelper.csproj => InkCanvas.IACoreHelper/InkCanvas.IACoreHelper.csproj (70%) rename {InkCanvasForClass.IACoreHelper => InkCanvas.IACoreHelper}/IpcProtocol.cs (99%) rename {InkCanvasForClass.IACoreHelper => InkCanvas.IACoreHelper}/Program.cs (99%) rename {InkCanvasForClass.IACoreHelper => InkCanvas.IACoreHelper}/Properties/AssemblyInfo.cs (74%) diff --git a/Ink Canvas.sln b/Ink Canvas.sln index 7907e2c2..91d90a3a 100644 --- a/Ink Canvas.sln +++ b/Ink Canvas.sln @@ -9,7 +9,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvas.PluginSdk", "InkC EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvas.Controls", "InkCanvas.Controls\InkCanvas.Controls.csproj", "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvasForClass.IACoreHelper", "InkCanvasForClass.IACoreHelper\InkCanvasForClass.IACoreHelper.csproj", "{B1A2C3D4-E5F6-7890-ABCD-EF1234567891}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvas.IACoreHelper", "InkCanvas.IACoreHelper\InkCanvas.IACoreHelper.csproj", "{B1A2C3D4-E5F6-7890-ABCD-EF1234567891}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Ink Canvas/Helpers/IpcIACoreClient.cs b/Ink Canvas/Helpers/IpcIACoreClient.cs index e320b80a..84a7e27f 100644 --- a/Ink Canvas/Helpers/IpcIACoreClient.cs +++ b/Ink Canvas/Helpers/IpcIACoreClient.cs @@ -32,7 +32,7 @@ namespace Ink_Canvas.Helpers private bool _available; private static string HelperExePath => - Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "InkCanvasForClass.IACoreHelper.exe"); + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "InkCanvas.IACoreHelper.exe"); private string PipeName => string.Format("ICC_IACoreHelper_{0}", Process.GetCurrentProcess().Id); diff --git a/Ink Canvas/InkCanvasForClass.csproj b/Ink Canvas/InkCanvasForClass.csproj index 2721fa3e..e7c2472b 100644 --- a/Ink Canvas/InkCanvasForClass.csproj +++ b/Ink Canvas/InkCanvasForClass.csproj @@ -139,7 +139,7 @@ - + false false @@ -661,7 +661,7 @@ - + diff --git a/InkCanvasForClass.IACoreHelper/App.config b/InkCanvas.IACoreHelper/App.config similarity index 100% rename from InkCanvasForClass.IACoreHelper/App.config rename to InkCanvas.IACoreHelper/App.config diff --git a/InkCanvasForClass.IACoreHelper/InkCanvasForClass.IACoreHelper.csproj b/InkCanvas.IACoreHelper/InkCanvas.IACoreHelper.csproj similarity index 70% rename from InkCanvasForClass.IACoreHelper/InkCanvasForClass.IACoreHelper.csproj rename to InkCanvas.IACoreHelper/InkCanvas.IACoreHelper.csproj index 96bb9909..f397654e 100644 --- a/InkCanvasForClass.IACoreHelper/InkCanvasForClass.IACoreHelper.csproj +++ b/InkCanvas.IACoreHelper/InkCanvas.IACoreHelper.csproj @@ -6,8 +6,8 @@ x86 {B1A2C3D4-E5F6-7890-ABCD-EF1234567891} Exe - InkCanvasForClass.IACoreHelper - InkCanvasForClass.IACoreHelper + InkCanvas.IACoreHelper + InkCanvas.IACoreHelper v4.7.2 512 true @@ -32,6 +32,19 @@ prompt 4 + + x86 + bin\$(Configuration)\ + true + full + pdbonly + false + true + DEBUG;TRACE + TRACE + prompt + 4 + diff --git a/InkCanvasForClass.IACoreHelper/IpcProtocol.cs b/InkCanvas.IACoreHelper/IpcProtocol.cs similarity index 99% rename from InkCanvasForClass.IACoreHelper/IpcProtocol.cs rename to InkCanvas.IACoreHelper/IpcProtocol.cs index ed93f411..765062e7 100644 --- a/InkCanvasForClass.IACoreHelper/IpcProtocol.cs +++ b/InkCanvas.IACoreHelper/IpcProtocol.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Text; -namespace InkCanvasForClass.IACoreHelper +namespace InkCanvas.IACoreHelper { // Named Pipe 名称,主进程和辅助进程共用 internal static class IpcConstants diff --git a/InkCanvasForClass.IACoreHelper/Program.cs b/InkCanvas.IACoreHelper/Program.cs similarity index 99% rename from InkCanvasForClass.IACoreHelper/Program.cs rename to InkCanvas.IACoreHelper/Program.cs index 640606f5..cddd1ddf 100644 --- a/InkCanvasForClass.IACoreHelper/Program.cs +++ b/InkCanvas.IACoreHelper/Program.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Windows.Ink; using System.Windows.Input; -namespace InkCanvasForClass.IACoreHelper +namespace InkCanvas.IACoreHelper { internal static class Program { diff --git a/InkCanvasForClass.IACoreHelper/Properties/AssemblyInfo.cs b/InkCanvas.IACoreHelper/Properties/AssemblyInfo.cs similarity index 74% rename from InkCanvasForClass.IACoreHelper/Properties/AssemblyInfo.cs rename to InkCanvas.IACoreHelper/Properties/AssemblyInfo.cs index 51bf9aa3..996eff24 100644 --- a/InkCanvasForClass.IACoreHelper/Properties/AssemblyInfo.cs +++ b/InkCanvas.IACoreHelper/Properties/AssemblyInfo.cs @@ -1,10 +1,10 @@ using System.Reflection; using System.Runtime.InteropServices; -[assembly: AssemblyTitle("InkCanvasForClass.IACoreHelper")] +[assembly: AssemblyTitle("InkCanvas.IACoreHelper")] [assembly: AssemblyDescription("IACore 32-bit ink shape recognition helper process")] [assembly: AssemblyCompany("ICC CE")] -[assembly: AssemblyProduct("InkCanvasForClass.IACoreHelper")] +[assembly: AssemblyProduct("InkCanvas.IACoreHelper")] [assembly: AssemblyCopyright("Copyright © ICC CE")] [assembly: ComVisible(false)] [assembly: AssemblyVersion("1.0.0.0")] From dada05aabbadb99b1fafa0bef284787f291dce1b Mon Sep 17 00:00:00 2001 From: PrefacedCorg <1876568293@qq.com> Date: Sat, 2 May 2026 00:56:58 +0800 Subject: [PATCH 02/19] =?UTF-8?q?feat(=E6=B5=AE=E5=8A=A8=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=A0=8F):=20=E6=B7=BB=E5=8A=A0=E9=80=80=E5=87=BA=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E5=B9=B6=E4=BC=98=E5=8C=96UI=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在浮动工具栏中添加退出按钮的本地化文本 - 移除未使用的BoardMenuFrame相关动画代码 - 调整浮动工具栏中元素的边距和圆角样式 - 将退出按钮文本改为使用i18n资源 --- Ink Canvas/Helpers/AnimationsHelper.cs | 6 ------ Ink Canvas/MainWindow.xaml | 10 +++++----- Ink Canvas/Properties/Strings.en-US.resx | 3 +++ Ink Canvas/Properties/Strings.resx | 3 +++ 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Ink Canvas/Helpers/AnimationsHelper.cs b/Ink Canvas/Helpers/AnimationsHelper.cs index 076bd4fd..00e8ba46 100644 --- a/Ink Canvas/Helpers/AnimationsHelper.cs +++ b/Ink Canvas/Helpers/AnimationsHelper.cs @@ -1,4 +1,3 @@ -using Ink_Canvas.Controls; using System; using System.Windows; using System.Windows.Media; @@ -10,11 +9,6 @@ namespace Ink_Canvas.Helpers { private static UIElement ResolveAnimationTarget(UIElement element) { - if (element is BoardMenuFrame frame) - { - frame.ApplyTemplate(); - return frame.AnimationTarget ?? element; - } return element; } diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 02aa2dac..5d706602 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -2460,7 +2460,7 @@ @@ -3116,7 +3116,7 @@ - - - diff --git a/Ink Canvas/Properties/Strings.en-US.resx b/Ink Canvas/Properties/Strings.en-US.resx index 8e6cd975..41553132 100644 --- a/Ink Canvas/Properties/Strings.en-US.resx +++ b/Ink Canvas/Properties/Strings.en-US.resx @@ -2175,6 +2175,9 @@ Hide Gesture + + Exit + Gesture options diff --git a/Ink Canvas/Properties/Strings.resx b/Ink Canvas/Properties/Strings.resx index 594af26d..ccbfe3e1 100644 --- a/Ink Canvas/Properties/Strings.resx +++ b/Ink Canvas/Properties/Strings.resx @@ -2218,6 +2218,9 @@ 手势 + + 退出 + 手势选项 From 46f4a0523c432bcf72609d6777efa04e34572f63 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 2 May 2026 01:17:09 +0800 Subject: [PATCH 03/19] =?UTF-8?q?improve:PPT=E4=BE=A7=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Windows/PPTQuickPanel.xaml | 369 +++++++++++++---------- Ink Canvas/Windows/PPTQuickPanel.xaml.cs | 70 ++--- 2 files changed, 233 insertions(+), 206 deletions(-) diff --git a/Ink Canvas/Windows/PPTQuickPanel.xaml b/Ink Canvas/Windows/PPTQuickPanel.xaml index 6a7262ea..434e15a5 100644 --- a/Ink Canvas/Windows/PPTQuickPanel.xaml +++ b/Ink Canvas/Windows/PPTQuickPanel.xaml @@ -3,69 +3,127 @@ 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" mc:Ignorable="d" - d:DesignHeight="400" d:DesignWidth="300"> + d:DesignHeight="420" d:DesignWidth="260"> - + + Storyboard.TargetProperty="X" + Duration="0:0:0.28"> - - + Storyboard.TargetProperty="X" + Duration="0:0:0.28"> - + + + + + + + - + - - + - + + - - - + + + + + + + + + + + - + - + - - - + - + @@ -73,72 +131,93 @@ - - - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Ink Canvas/Windows/HotkeyItem.xaml.cs b/Ink Canvas/Windows/HotkeyItem.xaml.cs index 63cda413..96f7056c 100644 --- a/Ink Canvas/Windows/HotkeyItem.xaml.cs +++ b/Ink Canvas/Windows/HotkeyItem.xaml.cs @@ -1,3 +1,4 @@ +using Ink_Canvas.Helpers; using System; using System.Windows; using System.Windows.Controls; @@ -68,7 +69,7 @@ namespace Ink_Canvas.Windows { if (_currentKey == Key.None) { - CurrentHotkeyTextBlock.Text = "未设置"; + CurrentHotkeyTextBlock.Text = LocalizationHelper.GetString("Hotkey_NotSet"); } else { diff --git a/Ink Canvas/Windows/SettingsViews/Helpers/MainWindowSettingsHelper.cs b/Ink Canvas/Windows/SettingsViews/Helpers/MainWindowSettingsHelper.cs index a8aacd5d..c0df8820 100644 --- a/Ink Canvas/Windows/SettingsViews/Helpers/MainWindowSettingsHelper.cs +++ b/Ink Canvas/Windows/SettingsViews/Helpers/MainWindowSettingsHelper.cs @@ -339,14 +339,12 @@ namespace Ink_Canvas.Windows.SettingsViews.Helpers }; bool isThemeRelated = false; - string controlNameLower = controlName.ToLower(); foreach (var themeControl in themeRelatedControls) { - string themeControlLower = themeControl.ToLower(); - if (controlNameLower.Contains(themeControlLower) || - themeControlLower.Contains(controlNameLower) || - controlNameLower == themeControlLower) + // OrdinalIgnoreCase 避免在循环里反复 ToLower() 生成中间字符串。 + if (controlName.IndexOf(themeControl, StringComparison.OrdinalIgnoreCase) >= 0 || + themeControl.IndexOf(controlName, StringComparison.OrdinalIgnoreCase) >= 0) { isThemeRelated = true; break; diff --git a/Ink Canvas/Windows/SettingsViews/Pages/AppearancePage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/AppearancePage.xaml.cs index befe7f63..a3b317f0 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/AppearancePage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/Pages/AppearancePage.xaml.cs @@ -228,8 +228,14 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void ViewboxFloatingBarScaleTransformValueSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(ViewboxFloatingBarScaleTransformValueSlider.Value, 2); - ViewboxFloatingBarScaleTransformValueSlider.Value = val; + var slider = ViewboxFloatingBarScaleTransformValueSlider; + var val = Math.Round(slider.Value, 2); + // 仅当四舍五入纠正了显示值时才回写;那次 set 会重入 ValueChanged 完成保存。 + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.Appearance.ViewboxFloatingBarScaleTransformValue = val; SettingsManager.SaveSettingsToFile(); var mw = GetMainWindow(); @@ -247,8 +253,13 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void ViewboxFloatingBarOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(ViewboxFloatingBarOpacityValueSlider.Value, 2); - ViewboxFloatingBarOpacityValueSlider.Value = val; + var slider = ViewboxFloatingBarOpacityValueSlider; + var val = Math.Round(slider.Value, 2); + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.Appearance.ViewboxFloatingBarOpacityValue = val; SettingsManager.SaveSettingsToFile(); var mw = GetMainWindow(); @@ -258,8 +269,13 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void ViewboxFloatingBarOpacityInPPTValueSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(ViewboxFloatingBarOpacityInPPTValueSlider.Value, 2); - ViewboxFloatingBarOpacityInPPTValueSlider.Value = val; + var slider = ViewboxFloatingBarOpacityInPPTValueSlider; + var val = Math.Round(slider.Value, 2); + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.Appearance.ViewboxFloatingBarOpacityInPPTValue = val; SettingsManager.SaveSettingsToFile(); var mw = GetMainWindow(); @@ -290,8 +306,13 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void ViewboxBlackBoardScaleTransformValueSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(ViewboxBlackBoardScaleTransformValueSlider.Value, 2); - ViewboxBlackBoardScaleTransformValueSlider.Value = val; + var slider = ViewboxBlackBoardScaleTransformValueSlider; + var val = Math.Round(slider.Value, 2); + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.Appearance.ViewboxBlackBoardScaleTransformValue = val; SettingsManager.SaveSettingsToFile(); var mw = GetMainWindow(); diff --git a/Ink Canvas/Windows/SettingsViews/Pages/AutomationPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/AutomationPage.xaml index 349fe365..a536648c 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/AutomationPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/AutomationPage.xaml @@ -373,30 +373,30 @@ Toggled="ToggleSwitchSaveFullPageStrokes_Toggled"/> - + - - - - - - - + + + + + + + e) { if (!_isLoaded) return; - var val = Math.Round(BrushAutoRestoreWidthSlider.Value, 2); - BrushAutoRestoreWidthSlider.Value = val; + var slider = BrushAutoRestoreWidthSlider; + var val = Math.Round(slider.Value, 2); + // 仅在四舍五入纠正了显示值时回写;那次 set 会重入 ValueChanged 完成保存。 + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.Canvas.BrushAutoRestoreWidth = val; SettingsManager.SaveSettingsToFile(); } diff --git a/Ink Canvas/Windows/SettingsViews/Pages/DebugPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/DebugPage.xaml index 50f5540b..50842bda 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/DebugPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/DebugPage.xaml @@ -8,6 +8,7 @@ xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls" + xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions" mc:Ignorable="d" Title="Debug"> @@ -32,8 +33,8 @@ Text="Debug" /> diff --git a/Ink Canvas/Windows/SettingsViews/Pages/RandomDrawPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/RandomDrawPage.xaml.cs index 5229cd89..b9e93862 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/RandomDrawPage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/Pages/RandomDrawPage.xaml.cs @@ -216,8 +216,14 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void MLAvoidanceWeightSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(MLAvoidanceWeightSlider.Value, 2); - MLAvoidanceWeightSlider.Value = val; + var slider = MLAvoidanceWeightSlider; + var val = Math.Round(slider.Value, 2); + // 仅当四舍五入纠正了显示值时才回写;那次 set 会重入 ValueChanged 完成保存。 + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.RandSettings.MLAvoidanceWeight = val; SettingsManager.SaveSettingsToFile(); } @@ -281,8 +287,13 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void TimerVolumeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(TimerVolumeSlider.Value, 2); - TimerVolumeSlider.Value = val; + var slider = TimerVolumeSlider; + var val = Math.Round(slider.Value, 2); + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.RandSettings.TimerVolume = val; SettingsManager.SaveSettingsToFile(); } @@ -321,8 +332,13 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages private void ProgressiveReminderVolumeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!_isLoaded) return; - var val = Math.Round(ProgressiveReminderVolumeSlider.Value, 2); - ProgressiveReminderVolumeSlider.Value = val; + var slider = ProgressiveReminderVolumeSlider; + var val = Math.Round(slider.Value, 2); + if (slider.Value != val) + { + slider.Value = val; + return; + } SettingsManager.Settings.RandSettings.ProgressiveReminderVolume = val; SettingsManager.SaveSettingsToFile(); } diff --git a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml index 9444c0ad..9ba11761 100644 --- a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml +++ b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml @@ -155,9 +155,9 @@ + ToolTipService.ToolTip="{i18n:I18n Key=Settings_Nav_Security_Tooltip}"> @@ -195,9 +195,9 @@ + ToolTipService.ToolTip="{i18n:I18n Key=Settings_Nav_Hotkey_Tooltip}"> diff --git a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs index 93e9b628..828cfce0 100644 --- a/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/SettingsWindow.xaml.cs @@ -587,10 +587,9 @@ namespace Ink_Canvas.Windows.SettingsViews if (string.IsNullOrWhiteSpace(raw)) return; string query = raw.Trim(); - string queryLower = query.ToLower(); var entry = _searchIndex.FirstOrDefault(e => e.Text.Equals(query, StringComparison.OrdinalIgnoreCase)) - ?? _searchIndex.FirstOrDefault(e => e.Text.ToLower().Contains(queryLower)); + ?? _searchIndex.FirstOrDefault(e => e.Text.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0); NavigateToSearchEntry(entry); } @@ -608,9 +607,8 @@ namespace Ink_Canvas.Windows.SettingsViews return; } - string queryLower = query.ToLower(); var suggestions = _searchIndex - .Where(e => e.Text.ToLower().Contains(queryLower)) + .Where(e => e.Text.IndexOf(query, StringComparison.OrdinalIgnoreCase) >= 0) .Select(e => e.Text) .Distinct() .Take(50) From 8db0e8c95c30e79eba5cc133d55994105ac7be4f Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sat, 2 May 2026 10:07:49 +0800 Subject: [PATCH 19/19] =?UTF-8?q?improve:=E8=AE=A1=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Windows/TimerControl.xaml.cs | 60 ++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/Ink Canvas/Windows/TimerControl.xaml.cs b/Ink Canvas/Windows/TimerControl.xaml.cs index e9634cbf..af331992 100644 --- a/Ink Canvas/Windows/TimerControl.xaml.cs +++ b/Ink Canvas/Windows/TimerControl.xaml.cs @@ -349,10 +349,68 @@ namespace Ink_Canvas.Windows ThemeHelper.ApplyTheme(this, settings, theme => { if (theme == "Dark") SetDarkThemeBorder(); - UpdateDigitDisplays(); + // 复用当前状态下的显示逻辑,避免把暂停/超时/运行中的读数重置为初始设定时间。 + RefreshDigitDisplayForCurrentState(); }); } + /// + /// 依据当前计时器状态刷新数字显示: + /// 运行中按 DateTime.Now、暂停中按 pauseTime 推算;处于超时模式时按超时值渲染;未启动时回退到初始设定值。 + /// 供主题切换等场景直接复用 Timer_Elapsed 的渲染分支。 + /// + private void RefreshDigitDisplayForCurrentState() + { + if (!isTimerRunning) + { + UpdateDigitDisplays(); + return; + } + + DateTime referenceTime = isPaused ? pauseTime : DateTime.Now; + TimeSpan timeSpan = referenceTime - startTime; + TimeSpan totalTimeSpan = new TimeSpan(hour, minute, second); + + if (!isOvertimeMode) + { + TimeSpan leftTimeSpan = totalTimeSpan - timeSpan; + if (leftTimeSpan.Milliseconds > 0) leftTimeSpan += new TimeSpan(0, 0, 1); + if (leftTimeSpan < TimeSpan.Zero) leftTimeSpan = TimeSpan.Zero; + + int displayHours = Math.Min(99, (int)leftTimeSpan.TotalHours); + SetDigitDisplay("Digit1Display", displayHours / 10); + SetDigitDisplay("Digit2Display", displayHours % 10); + SetDigitDisplay("Digit3Display", leftTimeSpan.Minutes / 10); + SetDigitDisplay("Digit4Display", leftTimeSpan.Minutes % 10); + SetDigitDisplay("Digit5Display", leftTimeSpan.Seconds / 10); + SetDigitDisplay("Digit6Display", leftTimeSpan.Seconds % 10); + SetColonDisplay(false); + } + else + { + TimeSpan overtimeSpan = timeSpan - totalTimeSpan; + if (overtimeSpan < TimeSpan.Zero) overtimeSpan = TimeSpan.Zero; + + int displayHours = Math.Max(0, Math.Min(99, (int)overtimeSpan.TotalHours)); + bool shouldShowRed = MainWindow.Settings?.RandSettings?.EnableOvertimeRedText == true; + + int hoursTens = Math.Max(0, Math.Min(9, Math.Abs(displayHours / 10) % 10)); + int hoursOnes = Math.Max(0, Math.Min(9, (displayHours % 10 + 10) % 10)); + int minutesTens = Math.Max(0, Math.Min(9, Math.Abs(overtimeSpan.Minutes) / 10)); + int minutesOnes = Math.Max(0, Math.Min(9, Math.Abs(overtimeSpan.Minutes) % 10)); + int secondsTens = Math.Max(0, Math.Min(9, Math.Abs(overtimeSpan.Seconds) / 10)); + int secondsOnes = Math.Max(0, Math.Min(9, Math.Abs(overtimeSpan.Seconds) % 10)); + + SetDigitDisplay("Digit1Display", hoursTens, shouldShowRed); + SetDigitDisplay("Digit2Display", hoursOnes, shouldShowRed); + SetDigitDisplay("Digit3Display", minutesTens, shouldShowRed); + SetDigitDisplay("Digit4Display", minutesOnes, shouldShowRed); + SetDigitDisplay("Digit5Display", secondsTens, shouldShowRed); + SetDigitDisplay("Digit6Display", secondsOnes, shouldShowRed); + SetColonDisplay(shouldShowRed); + } + } + private void UpdateDigitDisplays() { SetDigitDisplay("Digit1Display", hour / 10);