2

我正在通过 Xamarin 创建我的第一个 OS X 应用程序,并且我有一个无窗口应用程序,所以它只是菜单栏中的一个图标,带有一个图标和一个用于关闭应用程序的菜单。我想使用以下代码通过菜单项关闭应用程序:

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;
}

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

有人对此有解决方案吗?

4

1 回答 1

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”而终止应用程序,原因:“要插入菜单的项目已经在另一个菜单中”

于 2015-08-13T01:50:32.770 回答