2015-08-13 1 views
1

Я создаю свое первое приложение OS X через Xamarin, и у меня есть приложение без окон, поэтому это просто значок в строке меню со значком и меню для закрытия приложения. Я хочу, чтобы закрыть приложение через MenuItem с помощью следующего кода:Завершение приложения windowsless mac

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

Вы скрываете делегат события, добавляя его в меню «несуществующее/скрытое» 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; 
    } 

FYI: Если вам нужно что же бросить пункт меню как на меню приложения и состояния затем создать совершенно новый NSMenuItem и родителей (AddItem) это в меню приложения в качестве пунктов меню обмена вызовет хороший AppKit аварию:

, истекающее приложение из-за неперехваченное исключением «NSInternalInconsistencyException», причина: «Пункт для вставки в меню уже находится в другом меню»

+0

Спасибо за решение и объяснение! –

+0

NP, рад помочь – SushiHangover

Смежные вопросы