diff --git a/src/Ursa/Controls/Dialog/Options/OverlayDialogOptions.cs b/src/Ursa/Controls/Dialog/Options/OverlayDialogOptions.cs index 086fc32..0ed136d 100644 --- a/src/Ursa/Controls/Dialog/Options/OverlayDialogOptions.cs +++ b/src/Ursa/Controls/Dialog/Options/OverlayDialogOptions.cs @@ -66,4 +66,8 @@ public class OverlayDialogOptions public bool CanResize { get; set; } public string? StyleClass { get; set; } + + /// + /// + internal Delegate? OnDialogControlClosed { set; get; } } \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/OverlayDialog.cs b/src/Ursa/Controls/Dialog/OverlayDialog.cs index bc6e01a..08f94a5 100644 --- a/src/Ursa/Controls/Dialog/OverlayDialog.cs +++ b/src/Ursa/Controls/Dialog/OverlayDialog.cs @@ -34,10 +34,22 @@ public static class OverlayDialog DataContext = vm, }; ConfigureDefaultDialogControl(t, options); + + if (options?.OnDialogControlClosed != null) + { + t.AddHandler(OverlayShared.OverlayFeedbackElement.ClosedEvent, options.OnDialogControlClosed); + + t.AddHandler(OverlayShared.OverlayFeedbackElement.ClosedEvent, (s, _) => + { + if (s is not DialogControlBase dc) return; + dc.RemoveHandler(OverlayShared.OverlayFeedbackElement.ClosedEvent, options.OnDialogControlClosed); + }); + } + host.AddDialog(t); } - + public static void Show(object? vm, string? hostId = null, OverlayDialogOptions? options = null) { var host = OverlayDialogManager.GetHost(hostId, options?.TopLevelHashCode); diff --git a/src/Ursa/Controls/NumPad/NumPad.cs b/src/Ursa/Controls/NumPad/NumPad.cs index 45228ea..5c9d5cc 100644 --- a/src/Ursa/Controls/NumPad/NumPad.cs +++ b/src/Ursa/Controls/NumPad/NumPad.cs @@ -55,7 +55,7 @@ public class NumPad: TemplatedControl GotFocusEvent.RemoveHandler(OnTargetGotFocus, input); } } - + private static void OnTargetGotFocus(object? sender, GotFocusEventArgs e) { if (sender is not InputElement) return; @@ -75,12 +75,19 @@ public class NumPad: TemplatedControl } return; } - var numPad = new NumPad() + var numPad = new NumPad() { Target = sender as InputElement , _targetInnerText = FindTextBoxInTarget((sender as InputElement)!) }; - OverlayDialog.Show(numPad, new object(), options: new OverlayDialogOptions() { Buttons = DialogButton.None }); + OverlayDialog.Show(numPad, new object(), options: new OverlayDialogOptions() + { + Buttons = DialogButton.None, + OnDialogControlClosed = (object? ss, object? e) => + { + numPad.Target?.Focus(); + } + }); } private static readonly Dictionary KeyInputMapping = new() @@ -138,7 +145,7 @@ public class NumPad: TemplatedControl // 如果目标本身就是 TextBox if (target is TextBox textBox) return textBox; - + // 如果目标是 TemplatedControl,并且已经应用了模板 if (target is TemplatedControl templatedControl && templatedControl.IsInitialized) {