You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET MAUI Blazor Hybrid中实现系统托盘图标及交互?

.NET MAUI Blazor 实现系统托盘图标方案

核心思路

.NET MAUI本身无原生系统托盘支持,需通过平台特定代码结合第三方工具包或自定义实现,Blazor项目需注意与MAUI原生逻辑的交互。

可行方案

方案一:使用 CommunityToolkit.Maui

官方维护的工具包已支持跨平台系统托盘(TrayIcon),兼容Blazor项目:

  1. 安装NuGet包:CommunityToolkit.Maui 和 CommunityToolkit.Maui.Core
  2. 在MauiProgram.cs中注册工具包:
    builder.UseMauiApp<App>().UseMauiCommunityToolkit();
    
  3. 在MAUI原生逻辑层(如MainPage.xaml.cs)创建托盘图标:
    var trayIcon = new TrayIcon
    {
        Icon = ImageSource.FromFile("tray_icon.png"),
        TooltipText = "MAUI Blazor 托盘示例"
    };
    
    // 添加右键菜单
    trayIcon.MenuItems.Add(new MenuItem { Text = "打开窗口", Command = new Command(() => App.Current.MainPage.Show()) });
    trayIcon.MenuItems.Add(new MenuItem { Text = "退出", Command = new Command(() => Application.Current.Quit()) });
    
    // 托盘图标点击事件
    trayIcon.Tapped += (s, e) => App.Current.MainPage.Show();
    
    // 显示托盘图标
    TrayIcon.Add(trayIcon);
    
  4. Blazor组件可通过依赖注入调用MAUI封装的托盘服务,实现跨层交互。

方案二:自定义平台特定实现

若第三方库不兼容,可针对目标平台编写原生代码:

  • Windows平台:在Platforms/Windows/App.xaml.cs中利用Windows Forms NotifyIcon:
    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        base.OnLaunched(args);
        var notifyIcon = new System.Windows.Forms.NotifyIcon
        {
            Icon = new System.Drawing.Icon("tray_icon.ico"),
            Visible = true,
            Text = "MAUI Blazor 托盘"
        };
        // 添加菜单和点击事件逻辑
    }
    
  • macOS平台:在Platforms/MacOS/AppDelegate.cs中利用AppKit NSStatusItem:
    public override void DidFinishLaunching(NSNotification notification)
    {
        base.DidFinishLaunching(notification);
        var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(NSStatusItemLength.Variable);
        statusItem.Image = NSImage.ImageNamed("tray_icon.png");
        statusItem.ToolTip = "MAUI Blazor 托盘";
        // 添加右键菜单逻辑
    }
    

修复hardcodet库兼容问题

你之前尝试的hardcodet NotifyIcon库适配WPF/WinForms,在MAUI中需调整:

  1. 确保引用.NET 6+兼容版本
  2. 在Windows平台项目的Platforms/Windows/Windows.csproj中添加Windows Forms引用:
    <ItemGroup>
        <FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" />
    </ItemGroup>
    
  3. 仅在Windows平台代码中实例化NotifyIcon,封装为MAUI服务后供Blazor调用,不要直接在Blazor组件中操作。

注意事项

  • 图标资源需适配对应平台格式(Windows用.ico,macOS用.png),放入平台资源目录
  • Blazor组件通过依赖注入调用托盘服务,避免直接操作平台API
  • 测试时注意平台权限(如macOS需允许通知权限)

内容的提问来源于stack exchange,提问作者Francisco Jose GOÑI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:48:40