Ich bin ein absoluter WPF-Neuling und frage mich, ob mir jemand einige Hinweise geben könnte, wie man eine Anwendung schreibt, die auf Tray minimiert beginnt. Die Idee ist, dass es regelmäßig einen RSS-Feed abruft und ein Toaster-Popup erstellt, wenn neue Feeds vorhanden sind.
Die Anwendung sollte weiterhin ein Hauptfenster haben (im Wesentlichen nur eine Liste mit allen Feedeinträgen), die jedoch standardmäßig ausgeblendet sein sollte.
Ich habe angefangen, über XAML und WPF zu lesen, und ich weiß, dass das StartupUri in der App.xaml auf mein Hauptfenster zeigen muss, aber ich habe keine Ahnung, wie das SysTray-Symbol richtig ausgeführt und das Hauptfenster ausgeblendet werden soll (dies auch bedeutet, dass wenn der Benutzer das Fenster minimiert, es auf die Taskleiste und nicht auf die Taskleiste minimiert werden sollte.
Irgendwelche Hinweise?
Antworten:
Es gibt kein NotifyIcon für WPF.
Ein Kollege von mir hat diese frei verfügbare Bibliothek effektiv genutzt:
quelle
Sie müssen das NotifyIcon-Steuerelement von System.Windows.Forms verwenden, oder Sie können alternativ die von der Windows-API bereitgestellte Notify Icon-API verwenden. WPF bietet kein solches Äquivalent und wurde mehrmals in Microsoft Connect angefordert.
Ich habe Code auf GitHub, der
System.Windows.Forms
NotifyIcon Component aus einer WPF-Anwendung verwendet. Der Code kann unter https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs angezeigt werdenHier sind die Zusammenfassungsbits:
Erstellen Sie ein WPF-Fenster mit ShowInTaskbar = False, das in einem nicht sichtbaren Zustand geladen wird.
Auf Klassenebene:
Während OnInitialize ():
Während OnLoaded ():
Und für die Interaktion (oben als notifyIcon.Click und DoubleClick dargestellt):
Von hier aus können Sie die Verwendung von WPF-Steuerelementen und APIs wie Kontextmenüs, Popup-Fenstern usw. wieder aufnehmen.
So einfach ist das. Sie benötigen nicht unbedingt ein WPF-Fenster, um die Komponente zu hosten. Dies ist nur die bequemste Möglichkeit, eines in eine WPF-App einzuführen (da ein Fenster im Allgemeinen der über App.xaml definierte Standardeinstiegspunkt ist). Sie benötigen keinen WPF-Wrapper oder ein Steuerelement eines Drittanbieters, da die SWF-Komponente garantiert in jeder .NET Framework-Installation vorhanden ist, die auch WPF-Unterstützung bietet, da sie Teil des .NET Framework ist (auf dem alle aktuellen und zukünftigen .NET Framework-Versionen aufbauen). Bisher gibt es keinen Hinweis von Microsoft, dass die SWF-Unterstützung bald aus .NET Framework entfernt wird.
Hoffentlich hilft das.
Es ist ein kleiner Käse, dass Sie eine Framework-Komponente vor 3.0 verwenden müssen, um ein Tray-Symbol zu erhalten, aber verständlicherweise gibt es, wie Microsoft es erklärt hat, kein Konzept für eine Taskleiste im Rahmen von WPF. WPF ist eine Präsentationstechnologie, und Benachrichtigungssymbole sind ein Betriebssystemkonzept (keine "Präsentation").
quelle
Ich hatte vor kurzem das gleiche Problem. Leider ist NotifyIcon derzeit nur ein Windows.Forms-Steuerelement. Wenn Sie es verwenden möchten, müssen Sie diesen Teil des Frameworks einschließen. Ich denke, das hängt davon ab, wie sehr Sie ein WPF-Purist sind.
Wenn Sie schnell und einfach loslegen möchten, lesen Sie dieses WPF NotifyIcon-Steuerelement für das Code-Projekt, das überhaupt nicht auf WinForms NotifyIcon basiert. Eine neuere Version scheint auf der Website des Autors und als NuGet-Paket verfügbar zu sein . Dies scheint mir der bisher beste und sauberste Weg zu sein.
Hör zu. Es kommt auch mit einer erstaunlichen Beispiel-App, die sehr einfach zu bedienen ist, und Sie können gut aussehende WPF-Popups, Tooltips und Kontextmenüs im Windows Live Messenger-Stil haben. Perfekt für die Anzeige eines RSS-Feeds. Ich verwende ihn für einen ähnlichen Zweck.
quelle