Как сделать значок в трее --только приложение C #в MonoMac (без значка в доке )?

Я пытаюсь создать приложение, которое будет иметь только значок в трее и не отображаться на панели задач. (аналогично Dropbox )Мне нужно создать версию приложения как для Windows, так и для Mac, поэтому я попытался использовать MonoMac для создания внешнего интерфейса для Mac -.

Как лучше всего создать приложение только для лотка -в MonoMac?

Все ресурсы, которые я нашел, говорят об одном из двух:

  • Добавьте LSUIElement1в файл Info.plist.
  • Добавьте следующий код в событие FinishedLaunchingв классе AppDelegate:NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;

Я пробовал все комбинации этих двух, но кажется, что как только я пытаюсь создать экземпляр C#System.Timers.Timer, значок снова появляется в доке в нижней части экрана. Я что-то упустил в том, как OSX обрабатывает фоновые приложения?

Что я делаю не так? Есть ли лучший способ сделать фоновое приложение со значком в верхнем трее, но без значка в нижней док-станции в OSX?

(Это очень похоже на этот SO-вопрос , но этот вопрос был задан пару лет назад, и на него никогда не было полного ответа, поэтому я надеюсь, что там может быть более полный ответ.)


Вот код, который у меня есть:

public partial class AppDelegate : NSApplicationDelegate
{
    MyServiceObject currentServiceObject;

    public AppDelegate () { }

    public override void FinishedLaunching (NSObject notification)
    {
        // Construct menu that will be displayed when tray icon is clicked
        var notifyMenu = new NSMenu();
        var exitMenuItem = new NSMenuItem("Quit My Application", 
            (a,b) => { System.Environment.Exit(0); }); // Just add 'Quit' command
        notifyMenu.AddItem(exitMenuItem);

        // Display tray icon in upper-right-hand corner of the screen
        var sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
        sItem.Menu = notifyMenu;
        sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(
            NSBundle.MainBundle.ResourcePath + @"/notify-icon.icns"));
        sItem.HighlightMode = true;

        // Remove the system tray icon from upper-right hand corner of the screen
        // (works without adjusting the LSUIElement setting in Info.plist)
        NSApplication.SharedApplication.ActivationPolicy = 
            NSApplicationActivationPolicy.Accessory;

        // Start running the program -- If I comment out then no dock icon appears
        currentServiceObject = new MyServiceObject();
    }
}

13
задан Community 23 May 2017 в 12:22
поделиться