Ich versuche, eine Anwendung zu erstellen, die nur ein Tray-Symbol hat und nicht in der Taskleiste angezeigt wird. (ähnlich wie Dropbox) Ich muss sowohl die Windows- als auch die Mac-Version der Anwendung erstellen, also habe ich versucht, mit MonoMac das Mac-Frontend zu erstellen.Wie mache ich in MonoMac eine C# -Applikation nur mit einem Tray-Icon (kein Dock-Icon)?
Was ist der beste Weg, um eine Tray-only-Anwendung in MonoMac zu erstellen?
Alle Ressourcen, die ich gefunden habe, sagen, eines von zwei Dingen zu tun:
- hinzufügen
<key>LSUIElement</key><string>1</string>
zurInfo.plist
Datei. - Fügen Sie den folgenden Code in das
FinishedLaunching
Ereignis in derAppDelegate
Klasse:NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
ich alle Kombinationen dieser beiden versucht haben, aber es scheint, dass, sobald ich versuche, eine C# System.Timers.Timer
, das Symbol zu instanziiert Erneut erscheint im Dock am unteren Bildschirmrand. Fehle ich etwas darüber, wie OSX Hintergrundanwendungen behandelt?
Was mache ich falsch? Gibt es eine bessere Möglichkeit, eine Hintergrundanwendung zu erstellen, die in OSX ein Symbol für das obere Fach, aber kein Symbol für das untere Dock enthält?
(Dies ist sehr ähnlich wie diese SO question, aber diese Frage war von ein paar Jahren und wurde nie vollständig beantwortet, so hoffe ich, könnte es da draußen eine vollständigere Antwort sein.)
Hier ist der Code, den ich bisher habe:
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();
}
}
Liebe die Antwort wissen dazu auch! – berg