diff --git a/demo/Sandbox/Views/MainWindow.axaml b/demo/Sandbox/Views/MainWindow.axaml
index ba61022e..d1f30fdc 100644
--- a/demo/Sandbox/Views/MainWindow.axaml
+++ b/demo/Sandbox/Views/MainWindow.axaml
@@ -17,29 +17,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa/Controls/NumericUpDown/NumericUpDownBase.cs b/src/Ursa/Controls/NumericUpDown/NumericUpDownBase.cs
index e4130e77..78268cf3 100644
--- a/src/Ursa/Controls/NumericUpDown/NumericUpDownBase.cs
+++ b/src/Ursa/Controls/NumericUpDown/NumericUpDownBase.cs
@@ -26,6 +26,7 @@ public abstract class NumericUpDown : TemplatedControl, IClearControl, IInnerCon
protected ButtonSpinner? _spinner;
protected TextBox? _textBox;
protected internal Panel? _dragPanel;
+ private bool _isFocused;
private Point? _point;
protected internal bool _updateFromTextInput;
@@ -149,6 +150,7 @@ public bool ShowButtonSpinner
static NumericUpDown()
{
+ FocusableProperty.OverrideDefaultValue(true);
NumberFormatProperty.Changed.AddClassHandler((o, e) => o.OnFormatChange(e));
FormatStringProperty.Changed.AddClassHandler((o, e) => o.OnFormatChange(e));
IsReadOnlyProperty.Changed.AddClassHandler((o, args) => o.OnIsReadOnlyChanged(args));
@@ -216,6 +218,34 @@ protected override void OnLostFocus(RoutedEventArgs e)
{
_dragPanel.IsVisible = true;
}
+ FocusChanged(IsKeyboardFocusWithin);
+ }
+
+ protected override void OnGotFocus(GotFocusEventArgs e)
+ {
+ base.OnGotFocus(e);
+ FocusChanged(IsKeyboardFocusWithin);
+ }
+
+ private void FocusChanged(bool hasFocus)
+ {
+ // The OnGotFocus & OnLostFocus are asynchronously and cannot
+ // reliably tell you that have the focus. All they do is let you
+ // know that the focus changed sometime in the past. To determine
+ // if you currently have the focus you need to do consult the
+ // FocusManager.
+
+ bool wasFocused = _isFocused;
+ _isFocused = hasFocus;
+
+ if (hasFocus)
+ {
+
+ if (!wasFocused && _textBox != null)
+ {
+ _textBox.Focus();
+ }
+ }
}
protected override void OnKeyDown(KeyEventArgs e)