diff --git a/src/Avalonia.Controls/ContextMenu.cs b/src/Avalonia.Controls/ContextMenu.cs index 0ee906fb55..61e4b69c9b 100644 --- a/src/Avalonia.Controls/ContextMenu.cs +++ b/src/Avalonia.Controls/ContextMenu.cs @@ -21,6 +21,7 @@ namespace Avalonia.Controls new FuncTemplate(() => new StackPanel { Orientation = Orientation.Vertical }); private Popup _popup; private bool _attachedToControl; + private IInputElement _previousFocus; /// /// Initializes a new instance of the class. @@ -150,6 +151,7 @@ namespace Avalonia.Controls private void PopupOpened(object sender, EventArgs e) { + _previousFocus = FocusManager.Instance?.Current; Focus(); } @@ -171,6 +173,9 @@ namespace Avalonia.Controls ((ISetLogicalParent)_popup).SetParent(null); } + // HACK: Reset the focus when the popup is closed. We need to fix this so it's automatic. + FocusManager.Instance?.Focus(_previousFocus); + RaiseEvent(new RoutedEventArgs { RoutedEvent = MenuClosedEvent, diff --git a/src/Avalonia.Input/FocusManager.cs b/src/Avalonia.Input/FocusManager.cs index 500677c545..bcae8a3c53 100644 --- a/src/Avalonia.Input/FocusManager.cs +++ b/src/Avalonia.Input/FocusManager.cs @@ -168,7 +168,7 @@ namespace Avalonia.Input { var scope = control as IFocusScope; - if (scope != null) + if (scope != null && control.VisualRoot?.IsVisible == true) { yield return scope; }