我正在通过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;
}
但图标不会消失/应用程序无法关闭。
有人有解决方法吗?
答案 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',原因:'要插入的项 菜单已经在另一个菜单'