Browse Source

attempt at application menu pre-pending.

pull/2978/head
Dan Walmsley 7 years ago
parent
commit
92e0e2bccc
  1. 32
      samples/ControlCatalog/App.xaml
  2. 2
      samples/ControlCatalog/MainWindow.xaml
  3. 15
      src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

32
samples/ControlCatalog/App.xaml

@ -2,9 +2,9 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlCatalog.App">
<Application.Styles>
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/>
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml"/>
<StyleInclude Source="avares://Avalonia.Themes.Default/DefaultTheme.xaml"/>
<StyleInclude Source="avares://Avalonia.Themes.Default/Accents/BaseLight.xaml"/>
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Default.xaml"/>
<Style Selector="TextBlock.h1">
<Setter Property="FontSize" Value="{DynamicResource FontSizeLarge}"/>
<Setter Property="FontWeight" Value="Medium"/>
@ -17,4 +17,30 @@
</Style>
<StyleInclude Source="/SideBar.xaml"/>
</Application.Styles>
<NativeMenu.Menu>
<NativeMenu>
<NativeMenuItem>
<NativeMenuItem.Menu>
<NativeMenu>
<NativeMenuItem Header="About Avalonia" />
<NativeMenuItem Header="Preferences" Gesture="CMD + ," />
<NativeMenuItem Header="Services">
<NativeMenuItem.Menu>
<NativeMenu>
<NativeMenuItem Header="Service 1"/>
<NativeMenuItem Header="Service 2"/>
<NativeMenuItem Header="Service 3"/>
</NativeMenu>
</NativeMenuItem.Menu>
</NativeMenuItem>
<NativeMenuItem Header="Hide Avalonia" Gesture="CMD + H" />
<NativeMenuItem Header="Hide Others" Gesture="ALT + CMD + H" />
<NativeMenuItem Header="Show All" />
<NativeMenuItem Header="Quit Avalonia" Gesture="CMD + Q" />
</NativeMenu>
</NativeMenuItem.Menu>
</NativeMenuItem>
</NativeMenu>
</NativeMenu.Menu>
</Application>

2
samples/ControlCatalog/MainWindow.xaml

@ -7,7 +7,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ControlCatalog.ViewModels"
xmlns:v="clr-namespace:ControlCatalog.Views"
x:Class="ControlCatalog.MainWindow">
x:Class="ControlCatalog.MainWindow" NativeMenu.PrependApplicationMenu="True">
<NativeMenu.Menu>
<NativeMenu>

15
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using Avalonia.Controls;
using Avalonia.Controls.Platform;
@ -47,6 +48,7 @@ namespace Avalonia.Native
private bool _resetQueued;
private bool _exported = false;
private IAvnWindow _nativeWindow;
private bool _prependAppMenu;
private List<NativeMenuItem> _menuItems = new List<NativeMenuItem>();
public AvaloniaNativeMenuExporter(IAvnWindow nativeWindow, IAvaloniaNativeFactory factory)
@ -74,7 +76,7 @@ namespace Avalonia.Native
public void SetPrependApplicationMenu(bool prepend)
{
throw new NotImplementedException();
_prependAppMenu = prepend;
}
private void OnItemPropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e)
@ -235,6 +237,17 @@ namespace Avalonia.Native
private void SetMenu(IAvnWindow avnWindow, ICollection<NativeMenuItem> menuItems)
{
if (_prependAppMenu)
{
var menu = NativeMenu.GetMenu(Application.Current);
var items = menuItems.ToList();
items.InsertRange(0, menu.Items);
menuItems = items;
}
var appMenu = avnWindow.ObtainMainMenu();
if(appMenu is null)

Loading…
Cancel
Save