diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs
index 955af8888b..ed3526cc68 100644
--- a/src/Avalonia.Controls/MenuItem.cs
+++ b/src/Avalonia.Controls/MenuItem.cs
@@ -433,7 +433,14 @@ namespace Avalonia.Controls
///
protected override void OnKeyDown(KeyEventArgs e)
{
- // Don't handle here: let event bubble up to menu.
+ // HACK: Fix for #7777 - Menu keyboard focus incorrect when handling menu mnemonics.
+ // If we implement something like UWP's access key scopes then this code should be removed.
+ if (IsSubMenuOpen &&
+ _popup?.Host is IInputRoot popupRoot &&
+ popupRoot.AccessKeyHandler is MenuItemAccessKeyHandler handler)
+ {
+ handler.OnTextInput(this, new TextInputEventArgs { Text = e.Key.ToString() });
+ }
}
///
diff --git a/src/Avalonia.Controls/MenuItemAccessKeyHandler.cs b/src/Avalonia.Controls/MenuItemAccessKeyHandler.cs
index 4cc6a20082..964daa23fe 100644
--- a/src/Avalonia.Controls/MenuItemAccessKeyHandler.cs
+++ b/src/Avalonia.Controls/MenuItemAccessKeyHandler.cs
@@ -84,7 +84,7 @@ namespace Avalonia.Controls
///
/// The event sender.
/// The event args.
- protected virtual void OnTextInput(object? sender, TextInputEventArgs e)
+ protected internal virtual void OnTextInput(object? sender, TextInputEventArgs e)
{
if (!string.IsNullOrWhiteSpace(e.Text))
{