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

如何在Ubuntu 24.04的.NET 8.0 C#应用中实现App Indicator?

在Ubuntu 24.04上用.NET 8实现App Indicator

核心依赖:Ayatana AppIndicator

Ubuntu 24.04已用Ayatana AppIndicator框架替代旧版libappindicator,对应的.NET绑定可通过NuGet获取,无需依赖已下架的Mono包。

步骤1:安装系统底层依赖

打开终端执行以下命令安装基础库:

sudo apt install libayatana-appindicator3-1 libayatana-indicator3-7

步骤2:引入.NET绑定包

在你的.NET项目中安装官方维护的NuGet包:

dotnet add package Ayatana.AppIndicator

基础实现示例

以下代码实现主窗口隐藏/显示切换,以及右上角托盘图标和菜单:

using Gtk;
using Ayatana.AppIndicator;

class Program
{
    static Window mainWindow;
    static AppIndicator trayIndicator;

    static void Main()
    {
        Application.Init();

        // 创建主窗口
        mainWindow = new Window(".NET托盘应用")
        {
            WidthRequest = 400,
            HeightRequest = 300,
            WindowPosition = WindowPosition.Center
        };
        // 关闭窗口时最小化到托盘,不退出应用
        mainWindow.DeleteEvent += (sender, args) =>
        {
            mainWindow.Hide();
            args.RetVal = true;
        };

        // 初始化托盘图标
        trayIndicator = new AppIndicator("dotnet-tray-app", "network-idle", AppIndicatorCategory.ApplicationStatus);
        trayIndicator.Status = AppIndicatorStatus.Active;

        // 构建托盘菜单
        var trayMenu = new Menu();

        // 显示主窗口选项
        var showWindowItem = new MenuItem("显示主窗口");
        showWindowItem.Activated += (sender, args) => mainWindow.Show();
        trayMenu.Append(showWindowItem);

        // 退出应用选项
        var quitItem = new MenuItem("退出");
        quitItem.Activated += (sender, args) => Application.Quit();
        trayMenu.Append(quitItem);

        trayMenu.ShowAll();
        trayIndicator.Menu = trayMenu;

        // 默认隐藏主窗口,启动应用
        mainWindow.Hide();
        Application.Run();
    }
}

代码说明

  • 主窗口关闭事件中调用Hide(),实现最小化到托盘而非退出应用
  • AppIndicator构造参数:第一个为应用唯一ID,第二个为系统图标名(可替换为自定义图标路径)
  • 托盘菜单依赖Gtk的Menu组件,这是Ayatana框架的标准适配方式

相关参考

  • Ayatana AppIndicator的.NET绑定:可查看NuGet包内的README文档,或参考项目源码注释了解API细节
  • Gtk#官方文档:重点关注窗口生命周期、菜单组件的使用,因为托盘菜单依赖Gtk生态

注意事项

  • 自定义图标需放置到系统图标目录(如/usr/share/icons/hicolor/48x48/apps/),或在构造AppIndicator时指定完整文件路径
  • 确保已安装.NET 8 SDK:执行sudo apt install dotnet-sdk-8.0完成安装

内容的提问来源于stack exchange,提问作者Jonathan Gilbert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:12:41