diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index b299e72759..7eb36b2a57 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -105,22 +105,30 @@ namespace Avalonia.Native if (appMenu is null) { appMenu = _factory.CreateMenu(); - - _factory.SetAppMenu(appMenu); } + var menuItem = menu.Parent; + var appMenuHolder = menuItem?.Parent; + if (menu.Parent is null) { menuItem = new NativeMenuItem(); + } - menuItem.Parent = new NativeMenu(); + if(appMenuHolder is null) + { + appMenuHolder = new NativeMenu(); + + appMenuHolder.Add(menuItem); } menuItem.Menu = menu; - appMenu.Update(this, _factory, menuItem.Parent); + appMenu.Update(this, _factory, appMenuHolder); + + _factory.SetAppMenu(appMenu); } private void SetMenu(IAvnWindow avnWindow, NativeMenu menu) @@ -130,10 +138,12 @@ namespace Avalonia.Native if (appMenu is null) { appMenu = _factory.CreateMenu(); - avnWindow.SetMainMenu(appMenu); + } appMenu.Update(this, _factory, menu); + + avnWindow.SetMainMenu(appMenu); } } } diff --git a/src/Avalonia.Native/IAvnAppMenuItem.cs b/src/Avalonia.Native/IAvnAppMenuItem.cs index f349c59470..4d4d254d8d 100644 --- a/src/Avalonia.Native/IAvnAppMenuItem.cs +++ b/src/Avalonia.Native/IAvnAppMenuItem.cs @@ -18,9 +18,12 @@ namespace Avalonia.Native.Interop Managed.PropertyChanged += Item_PropertyChanged; - using (var buffer = new Utf8Buffer(item.Header)) + if(!string.IsNullOrWhiteSpace(item.Header)) { - Title = buffer.DangerousGetHandle(); + using (var buffer = new Utf8Buffer(item.Header)) + { + Title = buffer.DangerousGetHandle(); + } } if (item.Gesture != null) @@ -48,7 +51,8 @@ namespace Avalonia.Native.Interop _subMenu = factory.CreateMenu(); } - _subMenu.Update(exporter, factory, item.Menu); + SetSubMenu(_subMenu); + _subMenu.Update(exporter, factory, item.Menu, item.Header); } if (item.Menu == null && _subMenu != null)