Browse Source

Allow MenuItems to be separators.

If `MenuItem.Header == "-"` then apply the `:separator` pseudoclass to the `MenuItem` and display it as a separator.
pull/1891/head
Steven Kirk 8 years ago
parent
commit
b449003958
  1. 16
      samples/ControlCatalog/Pages/MenuPage.xaml.cs
  2. 20
      src/Avalonia.Controls/MenuItem.cs
  3. 12
      src/Avalonia.Themes.Default/MenuItem.xaml

16
samples/ControlCatalog/Pages/MenuPage.xaml.cs

@ -14,16 +14,26 @@ namespace ControlCatalog.Pages
new MenuItemViewModel
{
Header = "_File",
Items =
Items = new[]
{
new MenuItemViewModel { Header = "_Open..." },
new MenuItemViewModel { Header = "Save" },
new MenuItemViewModel { Header = "-" },
new MenuItemViewModel
{
Header = "Recent",
Items = new[]
{
new MenuItemViewModel { Header = "File1.txt" },
new MenuItemViewModel { Header = "File2.txt" },
}
},
}
},
new MenuItemViewModel
{
Header = "_Edit",
Items =
Items = new[]
{
new MenuItemViewModel { Header = "_Copy" },
new MenuItemViewModel { Header = "_Paste" },
@ -41,6 +51,6 @@ namespace ControlCatalog.Pages
public class MenuItemViewModel
{
public string Header { get; set; }
public IList<MenuItemViewModel> Items { get; } = new List<MenuItemViewModel>();
public IList<MenuItemViewModel> Items { get; set; }
}
}

20
src/Avalonia.Controls/MenuItem.cs

@ -105,6 +105,7 @@ namespace Avalonia.Controls
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()
@ -357,10 +358,21 @@ namespace Avalonia.Controls
{
base.OnTemplateApplied(e);
_popup = e.NameScope.Get<Popup>("PART_Popup");
_popup.DependencyResolver = DependencyResolver.Instance;
_popup.Opened += PopupOpened;
_popup.Closed += PopupClosed;
if (_popup != null)
{
_popup.Opened -= PopupOpened;
_popup.Closed -= PopupClosed;
_popup.DependencyResolver = null;
}
_popup = e.NameScope.Find<Popup>("PART_Popup");
if (_popup != null)
{
_popup.DependencyResolver = DependencyResolver.Instance;
_popup.Opened += PopupOpened;
_popup.Closed += PopupClosed;
}
}
/// <summary>

12
src/Avalonia.Themes.Default/MenuItem.xaml

@ -73,7 +73,17 @@
</ControlTemplate>
</Setter>
</Style>
<Style Selector="MenuItem:separator">
<Setter Property="Template">
<ControlTemplate>
<Separator Background="{DynamicResource ThemeControlMidBrush}"
Margin="29,1,0,1"
Height="1"/>
</ControlTemplate>
</Setter>
</Style>
<Style Selector="Menu > MenuItem">
<Setter Property="Template">
<ControlTemplate>

Loading…
Cancel
Save