Browse Source

working enabled when using click handlers.

pull/2978/head
Dan Walmsley 7 years ago
parent
commit
aaedaebe94
  1. 1
      src/Avalonia.Controls/NativeMenu.cs
  2. 2
      src/Avalonia.Controls/NativeMenuItem.cs
  3. 13
      src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

1
src/Avalonia.Controls/NativeMenu.cs

@ -48,7 +48,6 @@ namespace Avalonia.Controls
set => SetAndRaise(ParentProperty, ref _parent, value); set => SetAndRaise(ParentProperty, ref _parent, value);
} }
public void Add(NativeMenuItem item) => _items.Add(item); public void Add(NativeMenuItem item) => _items.Add(item);
public IEnumerator<NativeMenuItem> GetEnumerator() => _items.GetEnumerator(); public IEnumerator<NativeMenuItem> GetEnumerator() => _items.GetEnumerator();

2
src/Avalonia.Controls/NativeMenuItem.cs

@ -110,6 +110,8 @@ namespace Avalonia.Controls
Enabled = _command?.CanExecute(null) ?? true; Enabled = _command?.CanExecute(null) ?? true;
} }
public bool HasClickHandlers => Clicked != null;
public ICommand Command public ICommand Command
{ {
get => GetValue(CommandProperty); get => GetValue(CommandProperty);

13
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@ -48,13 +48,14 @@ namespace Avalonia.Native
private Dictionary<int, NativeMenuItem> _idsToItems = new Dictionary<int, NativeMenuItem>(); private Dictionary<int, NativeMenuItem> _idsToItems = new Dictionary<int, NativeMenuItem>();
private Dictionary<NativeMenuItem, int> _itemsToIds = new Dictionary<NativeMenuItem, int>(); private Dictionary<NativeMenuItem, int> _itemsToIds = new Dictionary<NativeMenuItem, int>();
private uint _revision = 1; private uint _revision = 1;
private bool _exported = false;
public AvaloniaNativeMenuExporter(IAvaloniaNativeFactory factory) public AvaloniaNativeMenuExporter(IAvaloniaNativeFactory factory)
{ {
_factory = factory; _factory = factory;
} }
public bool IsNativeMenuExported => throw new NotImplementedException(); public bool IsNativeMenuExported => _exported;
public event EventHandler OnIsNativeMenuExportedChanged; public event EventHandler OnIsNativeMenuExportedChanged;
@ -113,6 +114,8 @@ namespace Avalonia.Native
LayoutUpdated?.Invoke((_revision, 0)); LayoutUpdated?.Invoke((_revision, 0));
SetMenu(_menu.Items); SetMenu(_menu.Items);
_exported = true;
} }
private void QueueReset() private void QueueReset()
@ -153,9 +156,9 @@ namespace Avalonia.Native
menuItem.SetAction(new PredicateCallback(() => menuItem.SetAction(new PredicateCallback(() =>
{ {
if (item.Command != null) if (item.Command != null || item.HasClickHandlers)
{ {
return item.Command.CanExecute(null); return item.Enabled;
} }
return false; return false;
@ -186,9 +189,9 @@ namespace Avalonia.Native
menuItem.SetAction(new PredicateCallback(() => menuItem.SetAction(new PredicateCallback(() =>
{ {
if (item.Command != null) if (item.Command != null || item.HasClickHandlers)
{ {
return item.Command.CanExecute(null); return item.Enabled;
} }
return false; return false;

Loading…
Cancel
Save