From f9cbba541910b43d465e146ed7e888949d3c3e98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=8A=BC?= Date: Thu, 28 Aug 2025 11:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=20https://github.co?= =?UTF-8?q?m/irihitech/Ursa.Avalonia/issues/753=20=E5=BD=93=E6=9C=89?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E5=A4=96=E9=83=A8=20button=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=20=E4=B8=8D=E5=90=8C=E7=B1=BB=E5=9E=8B=E7=9A=84=20NumericUpDow?= =?UTF-8?q?n=E6=8E=A7=E4=BB=B6=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C?= =?UTF-8?q?=E7=82=B9=E5=87=BBbutton=E4=BC=9A=E6=8A=A5=E9=94=99=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正 IPv4Box.cs NumPad.cs NumPad.axaml 文件的编码格式为 utf-8 Semi.Avalonia.Demo.Desktop.Program 增加 SupportedOSPlatform --- demo/Ursa.Demo.Desktop/Program.cs | 8 +++- src/Ursa.Themes.Semi/Controls/NumPad.axaml | 2 +- src/Ursa/Controls/IPv4Box/IPv4Box.cs | 4 +- src/Ursa/Controls/NumPad/NumPad.cs | 24 +++++------ src/Ursa/Controls/NumericUpDown/IntUpDown.cs | 45 ++++++++++++++++++++ 5 files changed, 66 insertions(+), 17 deletions(-) diff --git a/demo/Ursa.Demo.Desktop/Program.cs b/demo/Ursa.Demo.Desktop/Program.cs index b74f9d3..4b5f190 100644 --- a/demo/Ursa.Demo.Desktop/Program.cs +++ b/demo/Ursa.Demo.Desktop/Program.cs @@ -1,10 +1,14 @@ -using System; -using Avalonia; +using Avalonia; using Avalonia.Dialogs; using Avalonia.Media; +using System; +using System.Runtime.Versioning; namespace Ursa.Demo.Desktop; +[SupportedOSPlatform("windows")] +[SupportedOSPlatform("linux")] +[SupportedOSPlatform("macos")] class Program { // Initialization code. Don't use any Avalonia, third-party APIs or any diff --git a/src/Ursa.Themes.Semi/Controls/NumPad.axaml b/src/Ursa.Themes.Semi/Controls/NumPad.axaml index 372f7d3..f70a947 100644 --- a/src/Ursa.Themes.Semi/Controls/NumPad.axaml +++ b/src/Ursa.Themes.Semi/Controls/NumPad.axaml @@ -1,4 +1,4 @@ - diff --git a/src/Ursa/Controls/IPv4Box/IPv4Box.cs b/src/Ursa/Controls/IPv4Box/IPv4Box.cs index cea14fa..5444bf3 100644 --- a/src/Ursa/Controls/IPv4Box/IPv4Box.cs +++ b/src/Ursa/Controls/IPv4Box/IPv4Box.cs @@ -1,4 +1,4 @@ -using System.Net; +using System.Net; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Metadata; @@ -109,7 +109,7 @@ public class IPv4Box: TemplatedControl } /// - /// ǷʹС + /// 是否使用小键盘输入 /// internal bool IsTargetByNumPad { diff --git a/src/Ursa/Controls/NumPad/NumPad.cs b/src/Ursa/Controls/NumPad/NumPad.cs index 6f81bb7..45228ea 100644 --- a/src/Ursa/Controls/NumPad/NumPad.cs +++ b/src/Ursa/Controls/NumPad/NumPad.cs @@ -1,4 +1,4 @@ -using Avalonia; +using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; @@ -20,7 +20,7 @@ public class NumPad: TemplatedControl } /// - /// Target Ŀڲ TextBox TextPresenter ؼ + /// Target 目标内部的 TextBox 控件 /// private TextBox? _targetInnerText; @@ -64,7 +64,7 @@ public class NumPad: TemplatedControl { if(existing.Target is IPv4Box pv4Box) { - pv4Box.IsTargetByNumPad = false; // ȡ IPv4Box NumPad ģʽ + pv4Box.IsTargetByNumPad = false; // 取消 IPv4Box 的 NumPad 输入模式 } existing.Target = sender as InputElement; existing._targetInnerText = FindTextBoxInTarget((sender as InputElement)!); @@ -107,7 +107,7 @@ public class NumPad: TemplatedControl if (Target is null || o is not NumPadButton b) return; var key = (b.NumMode ? b.NumKey : b.FunctionKey)?? Key.None; - // ڲΪ TextBox Ŀؼʹø TextBox ΪĿ + // 如果存在内部为 TextBox 的目标控件,则使用该 TextBox 作为输入目标 var realTarget = _targetInnerText ?? Target; if (KeyInputMapping.TryGetValue(key, out var s)) { @@ -129,28 +129,28 @@ public class NumPad: TemplatedControl } } /// - /// Ŀؼв TextBox ؼ + /// 在目标控件中查找 TextBox 控件 /// - /// Ŀؼ - /// ҵ TextBoxûҵ򷵻 null + /// 目标控件 + /// 找到的 TextBox,如果没有找到则返回 null private static TextBox? FindTextBoxInTarget(InputElement target) { - // Ŀ걾 TextBox + // 如果目标本身就是 TextBox if (target is TextBox textBox) return textBox; - // Ŀ TemplatedControlѾӦģ + // 如果目标是 TemplatedControl,并且已经应用了模板 if (target is TemplatedControl templatedControl && templatedControl.IsInitialized) { - // ͨģ PART_TextBox + // 尝试通过模板查找 PART_TextBox if (templatedControl.GetTemplateChildren().FirstOrDefault(c => c is TextBox) is TextBox partTextBox) return partTextBox; } - // Ŀ ILogicalʹ LogicalTree չ + // 如果目标是 ILogical,使用 LogicalTree 扩展方法查找 if (target is ILogical logical) { - // ʹ GetLogicalDescendants ߼ӿؼ + // 使用 GetLogicalDescendants 方法查找所有逻辑子控件 var textBoxes = logical.GetLogicalDescendants().OfType(); return textBoxes.FirstOrDefault(); } diff --git a/src/Ursa/Controls/NumericUpDown/IntUpDown.cs b/src/Ursa/Controls/NumericUpDown/IntUpDown.cs index de1ac48..14c5fe0 100644 --- a/src/Ursa/Controls/NumericUpDown/IntUpDown.cs +++ b/src/Ursa/Controls/NumericUpDown/IntUpDown.cs @@ -32,6 +32,10 @@ public class NumericIntUpDown : NumericUpDownBase var result = a - b; return result > Value ? Minimum : result; } + public override void Clear() + { + base.Clear(); + } } public class NumericUIntUpDown : NumericUpDownBase @@ -68,6 +72,10 @@ public class NumericUIntUpDown : NumericUpDownBase var result = a - b; return result > Value ? Minimum : result; } + public override void Clear() + { + base.Clear(); + } } public class NumericDoubleUpDown : NumericUpDownBase @@ -91,6 +99,10 @@ public class NumericDoubleUpDown : NumericUpDownBase protected override double? Add(double? a, double? b) => a + b; protected override double? Minus(double? a, double? b) => a - b; + public override void Clear() + { + base.Clear(); + } } public class NumericByteUpDown : NumericUpDownBase @@ -122,6 +134,10 @@ public class NumericByteUpDown : NumericUpDownBase var result = a - b; return (byte?)(result > Value ? Minimum : result); } + public override void Clear() + { + base.Clear(); + } } public class NumericSByteUpDown : NumericUpDownBase @@ -153,6 +169,10 @@ public class NumericSByteUpDown : NumericUpDownBase var result = a - b; return (sbyte?)(result > Value ? Minimum : result); } + public override void Clear() + { + base.Clear(); + } } public class NumericShortUpDown : NumericUpDownBase @@ -184,6 +204,10 @@ public class NumericShortUpDown : NumericUpDownBase var result = a - b; return (short?)(result > Value ? Minimum : result); } + public override void Clear() + { + base.Clear(); + } } public class NumericUShortUpDown : NumericUpDownBase @@ -215,6 +239,10 @@ public class NumericUShortUpDown : NumericUpDownBase var result = a - b; return (ushort?)(result > Value ? Minimum : result); } + public override void Clear() + { + base.Clear(); + } } public class NumericLongUpDown : NumericUpDownBase @@ -246,6 +274,10 @@ public class NumericLongUpDown : NumericUpDownBase var result = a - b; return result > Value ? Minimum : result; } + public override void Clear() + { + base.Clear(); + } } public class NumericULongUpDown : NumericUpDownBase @@ -269,6 +301,10 @@ public class NumericULongUpDown : NumericUpDownBase protected override ulong? Add(ulong? a, ulong? b) => a + b; protected override ulong? Minus(ulong? a, ulong? b) => a - b; + public override void Clear() + { + base.Clear(); + } } public class NumericFloatUpDown : NumericUpDownBase @@ -292,6 +328,10 @@ public class NumericFloatUpDown : NumericUpDownBase protected override float? Add(float? a, float? b) => a + b; protected override float? Minus(float? a, float? b) => a - b; + public override void Clear() + { + base.Clear(); + } } public class NumericDecimalUpDown : NumericUpDownBase @@ -315,4 +355,9 @@ public class NumericDecimalUpDown : NumericUpDownBase protected override decimal? Add(decimal? a, decimal? b) => a + b; protected override decimal? Minus(decimal? a, decimal? b) => a - b; + + public override void Clear() + { + base.Clear(); + } }