Vous devez utiliser le contrôle NotifyIcon de System.Windows.Forms, ou bien vous pouvez utiliser l'API Notify Icon fournie par l'API Windows. WPF ne fournit pas un tel équivalent, et cela a été demandé plusieurs fois sur Microsoft Connect.
J'ai du code sur GitHub qui utilise System.Windows.Forms
du composant NotifyIcon à partir d'une application WPF, le code peut être consulté à l'adresse suivante https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs
Voici le 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 :
private System.Windows.Forms.NotifyIcon notifyIcon = null;
Pendant OnInitialize() :
notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];
Pendant OnLoaded() :
notifyIcon.Visible = true;
Et pour l'interaction (représentée par notifyIcon.Click et DoubleClick ci-dessus) :
void notifyIcon_Click(object sender, EventArgs e)
{
ShowQuickLaunchMenu();
}
À partir de là, vous pouvez reprendre l'utilisation des contrôles WPF et des API telles que les menus contextuels, les fenêtres contextuelles, etc.
C'est aussi simple que cela. Vous n'avez pas exactement besoin d'une fenêtre WPF pour accueillir 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 n'avez pas besoin d'un wrapper WPF 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 puisqu'il fait partie du .NET Framework (sur lequel toutes les versions actuelles et futures du .NET Framework reposent). À ce jour, rien n'indique de la part de Microsoft que la prise en charge de SWF sera bientôt abandonnée dans le .NET Framework.
J'espère que cela vous aidera.
Le fait que vous deviez utiliser un composant de Framework pré-3.0 pour obtenir une icône de notification est un petit fromage, mais comme Microsoft l'a expliqué, il n'y a pas de concept de System Tray 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").