Merge pull request #495 from irihitech/numeric

Fix numeric family focus issue.
This commit is contained in:
Dong Bin
2024-11-29 22:18:49 +08:00
committed by GitHub
2 changed files with 41 additions and 23 deletions

View File

@@ -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 abstract class NumericUpDown : TemplatedControl, IClearControl, IInnerCon
static NumericUpDown()
{
FocusableProperty.OverrideDefaultValue<NumericUpDown>(true);
NumberFormatProperty.Changed.AddClassHandler<NumericUpDown>((o, e) => o.OnFormatChange(e));
FormatStringProperty.Changed.AddClassHandler<NumericUpDown>((o, e) => o.OnFormatChange(e));
IsReadOnlyProperty.Changed.AddClassHandler<NumericUpDown, bool>((o, args) => o.OnIsReadOnlyChanged(args));
@@ -216,6 +218,34 @@ public abstract class NumericUpDown : TemplatedControl, IClearControl, IInnerCon
{
_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)