From 04305234a107199c3e786c669a6de982630c7eca Mon Sep 17 00:00:00 2001 From: rabbitism Date: Sat, 9 Mar 2024 18:38:22 +0800 Subject: [PATCH 1/8] feat: prototype. --- demo/Ursa.Demo/Pages/BannerDemo.axaml | 1 + src/Ursa.Themes.Semi/Controls/NumPad.axaml | 14 ++++ src/Ursa.Themes.Semi/Controls/_index.axaml | 1 + src/Ursa/Controls/NumPad/NumPad.cs | 78 ++++++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 src/Ursa.Themes.Semi/Controls/NumPad.axaml create mode 100644 src/Ursa/Controls/NumPad/NumPad.cs diff --git a/demo/Ursa.Demo/Pages/BannerDemo.axaml b/demo/Ursa.Demo/Pages/BannerDemo.axaml index d7a275e..c518be6 100644 --- a/demo/Ursa.Demo/Pages/BannerDemo.axaml +++ b/demo/Ursa.Demo/Pages/BannerDemo.axaml @@ -47,5 +47,6 @@ + diff --git a/src/Ursa.Themes.Semi/Controls/NumPad.axaml b/src/Ursa.Themes.Semi/Controls/NumPad.axaml new file mode 100644 index 0000000..b7a4d55 --- /dev/null +++ b/src/Ursa.Themes.Semi/Controls/NumPad.axaml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml index ddb53fd..8db1c2b 100644 --- a/src/Ursa.Themes.Semi/Controls/_index.axaml +++ b/src/Ursa.Themes.Semi/Controls/_index.axaml @@ -22,6 +22,7 @@ + diff --git a/src/Ursa/Controls/NumPad/NumPad.cs b/src/Ursa/Controls/NumPad/NumPad.cs new file mode 100644 index 0000000..12bbcfb --- /dev/null +++ b/src/Ursa/Controls/NumPad/NumPad.cs @@ -0,0 +1,78 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Metadata; +using Avalonia.Controls.Primitives; +using Avalonia.Input; +using Avalonia.Interactivity; +using Irihi.Avalonia.Shared.Helpers; + +namespace Ursa.Controls; + +[TemplatePart(NumPad.PART_Seven, typeof(Button))] +public class NumPad: TemplatedControl +{ + public const string PART_Seven = "PART_Seven"; + private Button? _sevenButton; + public static readonly StyledProperty TargetProperty = AvaloniaProperty.Register( + nameof(Target)); + + public InputElement? Target + { + get => GetValue(TargetProperty); + set => SetValue(TargetProperty, value); + } + + public static readonly AttachedProperty AttachProperty = + AvaloniaProperty.RegisterAttached("Attach"); + + public static void SetAttach(InputElement obj, bool value) => obj.SetValue(AttachProperty, value); + public static bool GetAttach(InputElement obj) => obj.GetValue(AttachProperty); + + static NumPad() + { + TargetProperty.Changed.AddClassHandler((n, args) => n.OnTargetChanged(args)); + AttachProperty.Changed.AddClassHandler((input, args)=> OnAttachNumPad(input, args)); + } + + private static void OnAttachNumPad(InputElement input, AvaloniaPropertyChangedEventArgs args) + { + if (args.NewValue.Value) + { + GotFocusEvent.AddHandler(OnTargetGotFocus, input); + } + else + { + GotFocusEvent.RemoveHandler(OnTargetGotFocus, input); + } + } + + private void OnTargetChanged(AvaloniaPropertyChangedEventArgs args) + { + //GotFocusEvent.RemoveHandler(OnTargetGotFocus, args.OldValue.Value); + //GotFocusEvent.AddHandler(OnTargetGotFocus, args.NewValue.Value); + } + + private static void OnTargetGotFocus(object sender, GotFocusEventArgs e) + { + var numPad = new NumPad() { Target = sender as InputElement }; + OverlayDialog.ShowCustom(numPad, new object()); + } + + protected override void OnApplyTemplate(TemplateAppliedEventArgs e) + { + base.OnApplyTemplate(e); + Button.ClickEvent.RemoveHandler(OnSevenButtonClick, _sevenButton); + _sevenButton = e.NameScope.Find + + + + +