Browse Source

Merge pull request #1896 from AvaloniaUI/fixes/menuitem-separator-non-focusable

Make separator MenuItems non-focusable.
pull/1911/head
Jeremy Koritzinsky 8 years ago
committed by GitHub
parent
commit
268baa06fa
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      src/Avalonia.Controls/MenuItem.cs
  2. 26
      tests/Avalonia.Controls.UnitTests/MenuItemTests.cs

20
src/Avalonia.Controls/MenuItem.cs

@ -99,13 +99,13 @@ namespace Avalonia.Controls
SelectableMixin.Attach<MenuItem>(IsSelectedProperty);
CommandProperty.Changed.Subscribe(CommandChanged);
FocusableProperty.OverrideDefaultValue<MenuItem>(true);
HeaderProperty.Changed.AddClassHandler<MenuItem>(x => x.HeaderChanged);
IconProperty.Changed.AddClassHandler<MenuItem>(x => x.IconChanged);
IsSelectedProperty.Changed.AddClassHandler<MenuItem>(x => x.IsSelectedChanged);
ItemsPanelProperty.OverrideDefaultValue<MenuItem>(DefaultPanel);
ClickEvent.AddClassHandler<MenuItem>(x => x.OnClick);
SubmenuOpenedEvent.AddClassHandler<MenuItem>(x => x.OnSubmenuOpened);
IsSubMenuOpenProperty.Changed.AddClassHandler<MenuItem>(x => x.SubMenuOpenChanged);
PseudoClass<MenuItem, object>(HeaderProperty, x => x as string == "-", ":separator");
}
public MenuItem()
@ -420,6 +420,24 @@ namespace Avalonia.Controls
IsEnabled = Command == null || Command.CanExecute(CommandParameter);
}
/// <summary>
/// Called when the <see cref="Header"/> property changes.
/// </summary>
/// <param name="e">The property change event.</param>
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;
}
}
/// <summary>
/// Called when the <see cref="Icon"/> property changes.
/// </summary>

26
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);
}
}
}
Loading…
Cancel
Save