3

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

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

我正在使用的片段是:

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

4

1 回答 1

6

尝试为“主 nib 文件名”指定 .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 试试。如果它不起作用,也许我可以分享我的项目让你拆开。

于 2013-07-15T18:45:38.720 回答