Avalonia怎么创建一个托盘图标应用 Avalonia系统托盘程序

admin 百科 13
Avalonia 11.1+ 原生支持 NativeTrayIcon,需升级至11.2+,配置平台依赖、设置菜单与图标资源,并确保 tray.Show() 调用;跨平台图标格式各异,未设菜单或资源路径错误是常见问题根源。

Avalonia怎么创建一个托盘图标应用 Avalonia系统托盘程序-第1张图片-佛山资讯网

在 Avalonia 中创建托盘图标应用,核心是使用 NativeTrayIcon(从 Avalonia 11.1+ 开始原生支持),配合平台特定的托盘 API(Windows 使用 NotifyIcon,Linux 使用 StatusNotifierItem,macOS 使用 NSStatusBar)。不需要第三方库,但需注意版本和平台适配。

确保使用支持托盘的 Avalonia 版本

Avalonia 11.1 起内置 NativeTrayIcon,推荐升级到 11.2 或更高稳定版。旧版本(如 10.x)需依赖 Avalonia.Native.Tray 等社区库,现已不推荐。

  • 检查 .csproj 中引用:
  • 确保启用原生平台支持:Windows 需 Avalonia.Win32,Linux 需 Avalonia.X11Avalonia.Wayland,macOS 需 Avalonia.Native
  • 启动时调用 UsePlatformDetect()(默认已启用),无需手动指定后端

在 App.xaml.cs 中初始化托盘图标

AppBuilder 构建阶段注册并配置托盘图标,通常放在 BuildAvaloniaApp() 方法中:

public override void Initialize()
{
    AvaloniaXamlLoader.Load(this);
}

public override void OnFrameworkInitializationCompleted()
{
    if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
    {
        // 创建托盘图标
        var tray = new NativeTrayIcon
        {
            Title = "MyApp",
            ToolTip = "点击打开主窗口",
            Icon = new WindowIcon("Assets/icon.ico"), // Windows 推荐 .ico;Linux/macOS 可用 .png
        };

        // 设置右键菜单(必须设置,否则 macOS/Linux 不显示)
        tray.Menu = new NativeMenuItem[]
        {
            new NativeMenuItem { Header = "显示窗口", Command = ReactiveCommand.Create(() => desktop.MainWindow?.Show()) },
            new NativeMenuItem { Header = "退出", Command = ReactiveCommand.Create(() => desktop.Shutdown()) }
        };

        // 响应左键单击(可选)
        tray.Activated += (_, _) => desktop.MainWindow?.Show();

        // 启动托盘(关键步骤)
        tray.Show();

        desktop.MainWindow = new MainWindow();
        desktop.MainWindow.Show();
    }

    base.OnFrameworkInitializationCompleted();
}

登录后复制

处理图标资源与跨平台兼容性

不同系统对图标格式、尺寸要求不同,容易导致托盘图标不显示或模糊:

标签: linux react windows app access ubuntu 工具 usb 后端 mac ai macos

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~