diff --git a/src/Avalonia.Controls/NativeMenu.cs b/src/Avalonia.Controls/NativeMenu.cs index 1e2966ff2b..e30029d21e 100644 --- a/src/Avalonia.Controls/NativeMenu.cs +++ b/src/Avalonia.Controls/NativeMenu.cs @@ -48,7 +48,6 @@ namespace Avalonia.Controls set => SetAndRaise(ParentProperty, ref _parent, value); } - public void Add(NativeMenuItem item) => _items.Add(item); public IEnumerator GetEnumerator() => _items.GetEnumerator(); diff --git a/src/Avalonia.Controls/NativeMenuItem.cs b/src/Avalonia.Controls/NativeMenuItem.cs index 3f1a80dcfe..e26176676a 100644 --- a/src/Avalonia.Controls/NativeMenuItem.cs +++ b/src/Avalonia.Controls/NativeMenuItem.cs @@ -110,6 +110,8 @@ namespace Avalonia.Controls Enabled = _command?.CanExecute(null) ?? true; } + public bool HasClickHandlers => Clicked != null; + public ICommand Command { get => GetValue(CommandProperty); diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 647b867184..1fade4b1a1 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -48,13 +48,14 @@ namespace Avalonia.Native private Dictionary _idsToItems = new Dictionary(); private Dictionary _itemsToIds = new Dictionary(); private uint _revision = 1; + private bool _exported = false; public AvaloniaNativeMenuExporter(IAvaloniaNativeFactory factory) { _factory = factory; } - public bool IsNativeMenuExported => throw new NotImplementedException(); + public bool IsNativeMenuExported => _exported; public event EventHandler OnIsNativeMenuExportedChanged; @@ -113,6 +114,8 @@ namespace Avalonia.Native LayoutUpdated?.Invoke((_revision, 0)); SetMenu(_menu.Items); + + _exported = true; } private void QueueReset() @@ -153,9 +156,9 @@ namespace Avalonia.Native menuItem.SetAction(new PredicateCallback(() => { - if (item.Command != null) + if (item.Command != null || item.HasClickHandlers) { - return item.Command.CanExecute(null); + return item.Enabled; } return false; @@ -186,9 +189,9 @@ namespace Avalonia.Native menuItem.SetAction(new PredicateCallback(() => { - if (item.Command != null) + if (item.Command != null || item.HasClickHandlers) { - return item.Command.CanExecute(null); + return item.Enabled; } return false;