首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统托盘(没有码头图标)应用程序使用C# / Mono在Mac上

系统托盘(没有码头图标)应用程序使用C# / Mono在Mac上
EN

Stack Overflow用户
提问于 2010-12-11 01:12:24
回答 2查看 6.2K关注 0票数 16

我想把我的一个C#应用程序移到Mono上,以便在Mac上使用。目前,我正在设法使它成为一种“背景”过程,但仍然有能力拥有GUI元素(我相信这排除了mono-service)。

最终目标是:

  1. 将托盘图标按时钟向上放置,用于大多数交互。
  2. Remove --启动应用程序时通常附带的停靠图标
  3. 在启动时运行应用程序。

简而言之,想想Dropbox应用程序是如何工作的。我想要那种类型的GUI,但是有一个Mono / Mac应用程序。

我认为这通常是通过在应用程序包的LSUIElement = 1中设置Info.plist来实现的。但是,我没有运气。我认为这可能与从应用程序包中启动我的应用程序的mono命令有关。一旦应用程序启动mono,我假设它不会级联到进一步的应用程序启动。不过,这完全是猜测。

有人对此有什么想法吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-19 20:36:03

我有你的答案:

首先,添加状态栏图标( Win窗体中的选项):

代码语言:javascript
复制
        NSStatusItem sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
        sItem.Menu = notifyMenu;
        sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(NSBundle.MainBundle.ResourcePath + @"/notify-icon.icns"));
        sItem.HighlightMode = true;

notifyMenu是NSMenu的实例,作为通知图标的上下文菜单项的一种方式。

并将使用图标编写器生成的ICNS文件放到项目文件中,并将其标记为内容。(右击->生成操作->内容)

现在是删除停靠图标的时候了:

在你的info.plist文件上。创建一个新的布尔类型项,并将其命名为"LSUIElement“,并将值设置为YES

希望能帮上忙。你好,Peyman Mortazavi

票数 10
EN

Stack Overflow用户

发布于 2011-07-03 22:59:48

我不知道是否正确地理解了你的问题。如果您只需要一个没有主窗口概念的应用程序,但是使用了系统托盘,那么我曾经使用类似于以下代码的代码使用WinForms来实现它

代码语言:javascript
复制
static void Main()
{
    Application.Run(new MyContext());
}

其中,MyContext是从ApplicationContext派生的类,该类在构造函数中使用NotifyIcon类创建托盘图标。实际上,Application.Run()为您的应用程序启动消息循环,给托盘图标一个响应用户单击的机会(托盘图标本身可以在前面创建)。它在Windows和Ubuntu上工作,从未在Mac上进行过测试。

尽管如此,今天我还是会在Linux上使用Gtk#,在Mac上使用MonoMac。在第一种情况下,概念可能非常相似(您还可以看到Tomboy代码,它就是这样做的!)在第二个-不知道,从来没有用过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4414629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档