diff --git a/src/Avalonia.Input/FocusManager.cs b/src/Avalonia.Input/FocusManager.cs index a1f1478f51..474b212a21 100644 --- a/src/Avalonia.Input/FocusManager.cs +++ b/src/Avalonia.Input/FocusManager.cs @@ -75,7 +75,9 @@ namespace Avalonia.Input // If control is null, set focus to the topmost focus scope. foreach (var scope in GetFocusScopeAncestors(Current).Reverse().ToList()) { - if (_focusScopes.TryGetValue(scope, out var element) && element != null) + if (scope != Scope && + _focusScopes.TryGetValue(scope, out var element) && + element != null) { Focus(element, method); return; diff --git a/tests/Avalonia.Input.UnitTests/InputElement_Focus.cs b/tests/Avalonia.Input.UnitTests/InputElement_Focus.cs index 8b8f2fa775..602455ba36 100644 --- a/tests/Avalonia.Input.UnitTests/InputElement_Focus.cs +++ b/tests/Avalonia.Input.UnitTests/InputElement_Focus.cs @@ -318,5 +318,24 @@ namespace Avalonia.Input.UnitTests Assert.True(root2.IsKeyboardFocusWithin); } } + + [Fact] + public void Can_Clear_Focus() + { + Button target; + + using (UnitTestApplication.Start(TestServices.RealFocus)) + { + var root = new TestRoot + { + Child = target = new Button() + }; + + target.Focus(); + FocusManager.Instance.Focus(null); + + Assert.Null(FocusManager.Instance.Current); + } + } } }