Browse Source

make the trayicon menu property an explicit member of trayicon.

pull/6560/head
Dan Walmsley 5 years ago
parent
commit
34b96f45f3
  1. 4
      samples/ControlCatalog/App.xaml
  2. 2
      src/Avalonia.Controls/Platform/ITopLevelNativeMenuExporter.cs
  3. 19
      src/Avalonia.Controls/TrayIcon.cs

4
samples/ControlCatalog/App.xaml

@ -30,7 +30,7 @@
<TrayIcon.Icons> <TrayIcon.Icons>
<TrayIcons> <TrayIcons>
<TrayIcon Icon="/Assets/test_icon.ico" ToolTipText="Avalonia Tray Icon ToolTip"> <TrayIcon Icon="/Assets/test_icon.ico" ToolTipText="Avalonia Tray Icon ToolTip">
<NativeMenu.Menu> <TrayIcon.Menu>
<NativeMenu> <NativeMenu>
<NativeMenuItem Header="Settings"> <NativeMenuItem Header="Settings">
<NativeMenu> <NativeMenu>
@ -43,7 +43,7 @@
</NativeMenuItem> </NativeMenuItem>
<NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" /> <NativeMenuItem Header="Exit" Command="{Binding ExitCommand}" />
</NativeMenu> </NativeMenu>
</NativeMenu.Menu> </TrayIcon.Menu>
</TrayIcon> </TrayIcon>
</TrayIcons> </TrayIcons>
</TrayIcon.Icons> </TrayIcon.Icons>

2
src/Avalonia.Controls/Platform/ITopLevelNativeMenuExporter.cs

@ -7,7 +7,7 @@ namespace Avalonia.Controls.Platform
{ {
public interface INativeMenuExporter public interface INativeMenuExporter
{ {
void SetNativeMenu(NativeMenu menu); void SetNativeMenu(NativeMenu? menu);
} }
public interface ITopLevelNativeMenuExporter : INativeMenuExporter public interface ITopLevelNativeMenuExporter : INativeMenuExporter

19
src/Avalonia.Controls/TrayIcon.cs

@ -68,6 +68,12 @@ namespace Avalonia.Controls
public static readonly AttachedProperty<TrayIcons> IconsProperty public static readonly AttachedProperty<TrayIcons> IconsProperty
= AvaloniaProperty.RegisterAttached<TrayIcon, Application, TrayIcons>("Icons"); = AvaloniaProperty.RegisterAttached<TrayIcon, Application, TrayIcons>("Icons");
/// <summary>
/// Defines the <see cref="Menu"/> property.
/// </summary>
public static readonly StyledProperty<NativeMenu?> MenuProperty
= AvaloniaProperty.Register<TrayIcon, NativeMenu?>(nameof(Menu));
/// <summary> /// <summary>
/// Defines the <see cref="Icon"/> property. /// Defines the <see cref="Icon"/> property.
/// </summary> /// </summary>
@ -90,6 +96,15 @@ namespace Avalonia.Controls
public static TrayIcons GetIcons(AvaloniaObject o) => o.GetValue(IconsProperty); public static TrayIcons GetIcons(AvaloniaObject o) => o.GetValue(IconsProperty);
/// <summary>
/// Gets or sets the Menu of the TrayIcon.
/// </summary>
public NativeMenu? Menu
{
get => GetValue(MenuProperty);
set => SetValue(MenuProperty, value);
}
/// <summary> /// <summary>
/// Gets or sets the icon of the TrayIcon. /// Gets or sets the icon of the TrayIcon.
/// </summary> /// </summary>
@ -155,6 +170,10 @@ namespace Avalonia.Controls
{ {
_impl.SetToolTipText(change.NewValue.GetValueOrDefault<string?>()); _impl.SetToolTipText(change.NewValue.GetValueOrDefault<string?>());
} }
else if (change.Property == MenuProperty)
{
_impl.MenuExporter?.SetNativeMenu(change.NewValue.GetValueOrDefault<NativeMenu>());
}
} }
/// <summary> /// <summary>

Loading…
Cancel
Save