在Monomac/Xamarin C#中创建一个无窗口菜单栏图标应用程序



我正试图在MonoMac/Xamarin.Mac中创建一个应用程序,该应用程序没有停靠图标,启动时也没有可见窗口,只有右上角菜单栏中的图标。

我在Info.plist中设置了LSUIElement=1(同时尝试了String和Boolean类型),但当应用程序启动时,状态菜单图标根本不会显示。我能让它出现的唯一方法是删除LSUIElement标志,尽管随后dock图标会变为可见。

我使用的代码片段是:

public partial class AppDelegate : NSApplicationDelegate
{
    public AppDelegate ()
    {
    }
    public override void FinishedLaunching (NSObject notification)
    {
        // Construct menu that will be displayed when tray icon is clicked
        var notifyMenu = new NSMenu();
        var exitMenuItem = new NSMenuItem("Quit", 
                                          (a,b) => { System.Environment.Exit(0); }); // Just add 'Quit' command
        notifyMenu.AddItem(exitMenuItem);
        // Display tray icon in upper-right-hand corner of the screen
        var sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
        sItem.Menu = notifyMenu;
        sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(
            NSBundle.MainBundle.ResourcePath + @"/menu_connected.png"));
        sItem.HighlightMode = true;
        // Remove the system tray icon from upper-right hand corner of the screen
        // (works without adjusting the LSUIElement setting in Info.plist)
        NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
    }
}

有人知道在MonoMac中创建一个没有停靠图标和菜单栏图标的无窗口应用程序的好方法吗?

谢谢,

BB

尝试为"Main nib file name"指定.xib

我前段时间做了这个,对我来说效果很好

  • 新的monomac项目
  • 在C#中创建了一个"AppController"类:

    [Register("AppController")]
    public partial class AppController : NSObject
    {
        public AppController()
        {
        }
        public override void AwakeFromNib()
        {
            var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
            statusItem.Menu = statusMenu;
            statusItem.Image = NSImage.ImageNamed("f3bfd_Untitled-thumb");
            statusItem.HighlightMode = true;
        }
    
  • 在MainMenu.xib中,我删除了应用程序菜单

  • 在MainMenu.xib中,我添加了一个自定义对象,并将其类型设置为AppController
  • 我在.xib中创建了状态菜单,然后用插座将其连接到AppController
  • 在info.plist中,我将"Application-is-agent(UIElement)"值添加为字符串,并将其设置为"1"

用.xib试试。如果它不起作用,也许我可以分享我的项目,让你拆开。

最新更新