我正在通过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;
}
但是该图标不会消失/该应用程序不会关闭。
有人对此有解决方案吗?
通过将事件委托添加到“不存在/隐藏” 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”而终止应用程序,原因:“要插入菜单的项目已经在另一个菜单中”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句