using Avalonia.Controls.Platform; using Avalonia.Controls.Templates; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Layout; namespace Avalonia.Controls { /// /// A top-level menu control. /// public class Menu : MenuBase, IMainMenu { private static readonly ITemplate DefaultPanel = new FuncTemplate(() => new StackPanel { Orientation = Orientation.Horizontal }); /// /// Initializes a new instance of the class. /// public Menu() { } /// /// Initializes a new instance of the class. /// /// The menu interaction handler. public Menu(IMenuInteractionHandler interactionHandler) : base(interactionHandler) { } static Menu() { ItemsPanelProperty.OverrideDefaultValue(typeof(Menu), DefaultPanel); } /// public override void Close() { if (!IsOpen) { return; } foreach (var i in ((IMenu)this).SubItems) { i.Close(); } IsOpen = false; SelectedIndex = -1; RaiseEvent(new RoutedEventArgs { RoutedEvent = MenuClosedEvent, Source = this, }); } /// public override void Open() { if (IsOpen) { return; } IsOpen = true; RaiseEvent(new RoutedEventArgs { RoutedEvent = MenuOpenedEvent, Source = this, }); } /// protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); var inputRoot = e.Root as IInputRoot; if (inputRoot?.AccessKeyHandler != null) { inputRoot.AccessKeyHandler.MainMenu = this; } } } }