终止无窗口mac应用程序

时间:2015-08-13 00:50:51

标签: macos terminate xamarin.mac windowless

我正在通过Xamarin创建我的第一个OS X应用程序,我有一个没有窗口的应用程序,因此它只是菜单栏中的一个图标,带有一个图标和菜单来关闭应用程序。我想通过menuitem使用以下代码关闭应用程序:

public override void DidFinishLaunching (NSNotification notification)
    {
        var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30f);
        statusItem.Image = NSImage.ImageNamed("os_logo.png");
        statusItem.HighlightMode = true;
        var menu = new NSMenu ();

        // Closing the app
        var quitItem = new NSMenuItem ("Sluit OPEN.dev", "q", delegate {
            NSApplication.SharedApplication.Terminate(NSApplication.SharedApplication);
        });
        menu.AddItem (quitItem);
        NSApplication.SharedApplication.MainMenu = menu;
        statusItem.Menu = menu;
    }

但图标不会消失/应用程序无法关闭。

有人有解决方法吗?

1 个答案:

答案 0 :(得分:1)

通过将事件委托添加到“不存在/隐藏”的SharedApplication菜单中,然后将其添加到状态菜单中,您将隐藏该事件委托。

如果您只需要状态菜单项:

    public override void DidFinishLaunching (NSNotification notification)
    {
        var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30f);
        statusItem.Image = NSImage.ImageNamed("madmen_icon.jpg");
        statusItem.HighlightMode = true;

        var menu = new NSMenu ();

        // Closing the app
        var quitItem = new NSMenuItem ("Sluit OPEN.dev ", "q", (s, e) => NSApplication.SharedApplication.Terminate (menu));
        menu.AddItem (quitItem);

        statusItem.Menu = menu;
    }

仅供参考:如果你在应用程序和状态菜单上都需要相同的退出菜单项,那么创建一个全新的NSMenuItem和父(addItem)它到应用程序菜单,因为共享菜单项将导致一个不错的AppKit崩溃:

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:'要插入的项   菜单已经在另一个菜单'