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)
{