From 85e40b9c0bc1fd8117b0798cd18fd7344b2a57c0 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 8 Jul 2017 17:26:00 +0200 Subject: [PATCH 1/2] Set e.Handled on command execution. Otherwise the `Click` event bubbles upwards causing #566. Fixes #566 --- src/Avalonia.Controls/Button.cs | 6 +++++- src/Avalonia.Controls/MenuItem.cs | 11 ++++++++++- src/Avalonia.Styling/Styling/Style.cs | 4 ++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Controls/Button.cs b/src/Avalonia.Controls/Button.cs index 2b3bbc8ad2..e6866b8142 100644 --- a/src/Avalonia.Controls/Button.cs +++ b/src/Avalonia.Controls/Button.cs @@ -207,7 +207,11 @@ namespace Avalonia.Controls /// The event args. protected virtual void OnClick(RoutedEventArgs e) { - Command?.Execute(CommandParameter); + if (Command != null) + { + Command.Execute(CommandParameter); + e.Handled = true; + } } /// diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs index 3d15ed99e7..3d66fbc51b 100644 --- a/src/Avalonia.Controls/MenuItem.cs +++ b/src/Avalonia.Controls/MenuItem.cs @@ -102,6 +102,11 @@ namespace Avalonia.Controls AccessKeyHandler.AccessKeyPressedEvent.AddClassHandler(x => x.AccessKeyPressed); } + public MenuItem() + { + + } + /// /// Occurs when a without a submenu is clicked. /// @@ -192,7 +197,11 @@ namespace Avalonia.Controls /// The click event args. protected virtual void OnClick(RoutedEventArgs e) { - Command?.Execute(CommandParameter); + if (Command != null) + { + Command.Execute(CommandParameter); + e.Handled = true; + } } /// diff --git a/src/Avalonia.Styling/Styling/Style.cs b/src/Avalonia.Styling/Styling/Style.cs index be4282cdc0..c050ff0e75 100644 --- a/src/Avalonia.Styling/Styling/Style.cs +++ b/src/Avalonia.Styling/Styling/Style.cs @@ -61,12 +61,12 @@ namespace Avalonia.Styling } /// - /// Gets or sets style's selector. + /// Gets or sets the style's selector. /// public Selector Selector { get; set; } /// - /// Gets or sets style's setters. + /// Gets or sets the style's setters. /// [Content] public IEnumerable Setters { get; set; } = new List(); From 075cd4b9a42a10beafda8a9adead55b4f51f32da Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 8 Jul 2017 19:56:57 +0200 Subject: [PATCH 2/2] Ensure menu gets closed. If there's a `Command` binding for a `MenuItem` it will now swallow the `Click` event, meaning that the menu won't get closed. Listen for handled events too. --- src/Avalonia.Controls/Menu.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Menu.cs b/src/Avalonia.Controls/Menu.cs index e919275d4f..994af9dab8 100644 --- a/src/Avalonia.Controls/Menu.cs +++ b/src/Avalonia.Controls/Menu.cs @@ -47,7 +47,7 @@ namespace Avalonia.Controls static Menu() { ItemsPanelProperty.OverrideDefaultValue(typeof(Menu), DefaultPanel); - MenuItem.ClickEvent.AddClassHandler(x => x.OnMenuClick); + MenuItem.ClickEvent.AddClassHandler(x => x.OnMenuClick, handledEventsToo: true); MenuItem.SubmenuOpenedEvent.AddClassHandler(x => x.OnSubmenuOpened); }