![](/img/trans.png)
[英]How do I make a tray-icon-only C# application in MonoMac (no dock icon)?
[英]System Tray only (no dock icon) application using C# / Mono on Mac
我希望將我的一個C#應用程序移到Mono上,以便在Mac上使用。 目前,我正在試圖弄清楚如何使它成為一種“背景”過程,但仍然具有GUI元素的能力(我相信這排除了mono-service
)。
最終目標是:
簡而言之,只需考慮Dropbox應用程序的工作原理。 我想要那種類型的GUI,但使用Mono / Mac應用程序。
我相信這通常是通過在應用程序包的Info.plist中設置LSUIElement = 1
來實現的。 但是,我沒有運氣。 我認為這可能與mono
命令在app bundle中啟動我的應用程序有關。 一旦應用程序啟動mono
我假設它不會級聯到進一步的應用程序啟動。 不過,這是一個純粹的猜測。
有沒有人對此有任何想法? 謝謝。
我有你的答案:
首先,添加狀態欄圖標(Win Forms中的Notify Icon替代):
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實例,作為通知圖標的上下文菜單條的一種方式。
並將使用Icon Composer制作的ICNS文件放在項目文件中,並將其標記為內容。 (右擊 - >構建動作 - >內容)
現在是時候刪除停靠圖標:
在您的info.plist文件中。 創建一個新的布爾類型項並將其命名為“ LSUIElement ”並將值設置為YES 。
希望能幫助到你。 此致,Peyman Mortazavi
我不知道我是否理解你的問題。 如果你只需要一個沒有任何主窗口概念的應用程序,但是使用系統托盤,我曾經使用WinForms這樣的代碼來完成它
static void Main()
{
Application.Run(new MyContext());
}
其中MyContext
是一個派生自ApplicationContext
的類,它在構造函數中使用NotifyIcon
類創建了一個托盤圖標。 事實上, Application.Run()
為您的應用程序啟動消息循環,讓托盤圖標有機會回答用戶點擊(托盤圖標本身可以在之前創建)。 它適用於Windows和Ubuntu,從未在Mac上進行過測試。
不過今天我會在Linux上使用Gtk#,在Mac上使用MonoMac。 在第一種情況下概念可能非常相似(你也可以看到Tomboy代碼,它就是這樣!)。 在第二 - 不知道,從未使用過它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.