diff --git a/Perspex.Controls/MenuItem.cs b/Perspex.Controls/MenuItem.cs index 4821a02fc1..a8df261c37 100644 --- a/Perspex.Controls/MenuItem.cs +++ b/Perspex.Controls/MenuItem.cs @@ -235,10 +235,32 @@ namespace Perspex.Controls e.Handled = true; } + break; + + case Key.Left: + if (!this.IsTopLevel && this.IsSubMenuOpen) + { + this.IsSubMenuOpen = false; + e.Handled = true; + } + + break; + + case Key.Right: + if (!this.IsTopLevel && this.HasSubMenu && !this.IsSubMenuOpen) + { + this.SelectedIndex = 0; + this.IsSubMenuOpen = true; + e.Handled = true; + } + break; } - if (!((e.Key == Key.Up || e.Key == Key.Down) && !this.IsSubMenuOpen)) + // If this key is a directional key and the submenu isn't open we need the parent + // menu item to handle the keypress, so don't pass the key to the base or it will try + // to move the selection in the non-open submenu. + if (!((e.Key == Key.Up || e.Key == Key.Down || e.Key == Key.Left || e.Key == Key.Right) && !this.IsSubMenuOpen)) { base.OnKeyDown(e); }