From aaedaebe94a113be8e452f59e08c1a17fb06cf28 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 25 Sep 2019 17:15:17 +0100 Subject: [PATCH] working enabled when using click handlers. --- src/Avalonia.Controls/NativeMenu.cs | 1 - src/Avalonia.Controls/NativeMenuItem.cs | 2 ++ src/Avalonia.Native/AvaloniaNativeMenuExporter.cs | 13 ++++++++----- 3 files changed, 10 insertions(+), 6 deletions(-) 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;