终止无窗口 mac 应用程序
Terminating windowless mac application
我正在通过 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;
}
但是图标不会disappear/the应用不会关闭。
有人对此有解决方案吗?
您通过在将事件委托添加到 'non-existent/hidden' 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 崩溃:
Terminating app due to uncaught exception
'NSInternalInconsistencyException', reason: 'Item to be inserted into
menu already is in another menu'
我正在通过 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;
}
但是图标不会disappear/the应用不会关闭。
有人对此有解决方案吗?
您通过在将事件委托添加到 'non-existent/hidden' 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 崩溃:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Item to be inserted into menu already is in another menu'