Je suis un débutant total de WPF et je me demande si quelqu'un pourrait me donner des conseils sur la façon d'écrire une application qui commence à être réduite au bac. L'idée est qu'il récupère périodiquement un flux RSS et crée un Toaster-Popup lorsqu'il y a de nouveaux flux.
L'application doit toujours avoir une fenêtre principale (essentiellement juste une liste contenant toutes les entrées de flux), mais qui doit être masquée par défaut.
J'ai commencé à lire sur XAML et WPF et je sais que StartupUri dans App.xaml doit pointer vers ma fenêtre principale, mais je n'ai aucune idée de la bonne manière de faire l'icône SysTray et de masquer la fenêtre principale (cela aussi signifie que lorsque l'utilisateur réduit la fenêtre, elle doit la réduire dans la barre d'état, pas dans la barre des tâches).
Des indices?
Réponses:
Il n'y a pas de NotifyIcon pour WPF.
Un de mes collègues a utilisé à bon escient cette bibliothèque disponible gratuitement:
la source
Vous devez utiliser le contrôle NotifyIcon de System.Windows.Forms, ou vous pouvez également utiliser l'API Notify Icon fournie par l'API Windows. WPF ne fournit aucun équivalent, et il a été demandé plusieurs fois sur Microsoft Connect.
J'ai du code sur GitHub qui utilise le
System.Windows.Forms
composant NotifyIcon à partir d'une application WPF, le code peut être consulté à https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.csVoici les bits de résumé:
Créez une fenêtre WPF avec ShowInTaskbar = False et qui est chargée dans un état non visible.
Au niveau de la classe:
Pendant OnInitialize ():
Pendant OnLoaded ():
Et pour l'interaction (indiquée par notifyIcon.Click et DoubleClick ci-dessus):
De là, vous pouvez reprendre l'utilisation des contrôles WPF et des API tels que les menus contextuels, les fenêtres contextuelles, etc.
C'est si simple. Vous n'avez pas exactement besoin d'une fenêtre WPF pour héberger le composant, c'est juste le moyen le plus pratique d'en introduire une dans une application WPF (car une fenêtre est généralement le point d'entrée par défaut défini via App.xaml), de même, vous ne le faites pas. Vous avez besoin d'un WPF Wrapper ou d'un contrôle tiers, car le composant SWF est garanti présent dans toute installation .NET Framework qui prend également en charge WPF car il fait partie du .NET Framework (sur lequel toutes les versions actuelles et futures de .NET Framework s'appuient). À ce jour, rien n'indique de la part de Microsoft que la prise en charge de SWF sera bientôt supprimée du .NET Framework.
J'espère que cela pourra aider.
C'est un peu le fromage que vous devez utiliser un composant de cadre pré-3.0 pour obtenir une icône de barre d'état, mais comme Microsoft l'a expliqué, il n'y a pas de concept de barre d'état système dans le cadre de WPF. WPF est une technologie de présentation et les icônes de notification sont un concept de système d'exploitation (et non de «présentation»).
la source
J'ai récemment eu ce même problème. Malheureusement, NotifyIcon est uniquement un contrôle Windows.Forms pour le moment, si vous voulez l'utiliser, vous devrez inclure cette partie du framework. Je suppose que cela dépend à quel point vous êtes un puriste WPF.
Si vous voulez un moyen rapide et facile de commencer, consultez ce contrôle WPF NotifyIcon sur le projet de code qui ne repose pas du tout sur WinForms NotifyIcon. Une version plus récente semble être disponible sur le site Web de l'auteur et sous forme de package NuGet . Cela me semble être le moyen le meilleur et le plus propre jusqu'à présent.
Vérifiez-le. Il est également livré avec un exemple d'application incroyable, très facile à utiliser, et vous pouvez avoir de superbes fenêtres contextuelles WPF de style Windows Live Messenger, des info-bulles et des menus contextuels. Parfait pour afficher un flux RSS, je l'utilise dans un but similaire.
la source