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

在 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.X11或Avalonia.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
还木有评论哦,快来抢沙发吧~