From 74a5b1f65ad0fd947c4118854e64fe29327d515c Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 13 Sep 2018 22:45:22 +0200 Subject: [PATCH 1/2] Added a failing MenuItem separator test. --- .../MenuItemTests.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 tests/Avalonia.Controls.UnitTests/MenuItemTests.cs diff --git a/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs new file mode 100644 index 0000000000..e7352af23e --- /dev/null +++ b/tests/Avalonia.Controls.UnitTests/MenuItemTests.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; + +namespace Avalonia.Controls.UnitTests +{ + public class MenuItemTests + { + [Fact] + public void Header_Of_Minus_Should_Apply_Separator_Pseudoclass() + { + var target = new MenuItem { Header = "-" }; + + Assert.True(target.Classes.Contains(":separator")); + } + + [Fact] + public void Separator_Item_Should_Set_Focusable_False() + { + var target = new MenuItem { Header = "-" }; + + Assert.False(target.Focusable); + } + } +} From f55b556b1c42e810ab6e66ad9f986a59d8868c56 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 13 Sep 2018 22:45:35 +0200 Subject: [PATCH 2/2] Make separator MenuItem non-focusable. --- src/Avalonia.Controls/MenuItem.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/MenuItem.cs b/src/Avalonia.Controls/MenuItem.cs index 03a43b5164..055d49fb0b 100644 --- a/src/Avalonia.Controls/MenuItem.cs +++ b/src/Avalonia.Controls/MenuItem.cs @@ -99,13 +99,13 @@ namespace Avalonia.Controls SelectableMixin.Attach(IsSelectedProperty); CommandProperty.Changed.Subscribe(CommandChanged); FocusableProperty.OverrideDefaultValue(true); + HeaderProperty.Changed.AddClassHandler(x => x.HeaderChanged); IconProperty.Changed.AddClassHandler(x => x.IconChanged); IsSelectedProperty.Changed.AddClassHandler(x => x.IsSelectedChanged); ItemsPanelProperty.OverrideDefaultValue(DefaultPanel); ClickEvent.AddClassHandler(x => x.OnClick); SubmenuOpenedEvent.AddClassHandler(x => x.OnSubmenuOpened); IsSubMenuOpenProperty.Changed.AddClassHandler(x => x.SubMenuOpenChanged); - PseudoClass(HeaderProperty, x => x as string == "-", ":separator"); } public MenuItem() @@ -420,6 +420,24 @@ namespace Avalonia.Controls IsEnabled = Command == null || Command.CanExecute(CommandParameter); } + /// + /// Called when the property changes. + /// + /// The property change event. + private void HeaderChanged(AvaloniaPropertyChangedEventArgs e) + { + if (e.NewValue is string newValue && newValue == "-") + { + PseudoClasses.Add(":separator"); + Focusable = false; + } + else if (e.OldValue is string oldValue && oldValue == "-") + { + PseudoClasses.Remove(":separator"); + Focusable = true; + } + } + /// /// Called when the property changes. ///