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 Fournit pas un tel équivalent, et il a été demandé plusieurs fois sur Microsoft Connect.
je code sur GitHub qui utilise System.Windows.Forms
NotifyIcon Component dans une application WPF, le code peut être consulté à https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs
Voici les bits de synthèse:
Créer une fenêtre WPF avec ShowInTaskbar = False, et qui est chargé dans un état non visible.
Au niveau de la classe:
private System.Windows.Forms.NotifyIcon notifyIcon = null;
Au cours OnInitialize():
notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];
Au cours onLoaded():
notifyIcon.Visible = true;
Et pour l'interaction (comme montré notifyIcon.Click et DoubleClick ci-dessus):
void notifyIcon_Click(object sender, EventArgs e)
{
ShowQuickLaunchMenu();
}
De là, vous pouvez reprendre l'utilisation des contrôles WPF et les API telles que les menus contextuels, les fenêtres pop-up, etc.
C'est aussi simple que cela. Vous n'avez pas vraiment besoin d'une fenêtre WPF pour héberger le composant, c'est juste le moyen le plus pratique d'en introduire un dans une application WPF (comme une fenêtre est généralement le point d'entrée par défaut défini via App.xaml), de même, Vous avez besoin d'un Wrapper WPF ou d'un contrôle tiers, car le composant SWF est garanti dans toute installation .NET Framework qui est également prise en charge par WPF car elle fait partie du .NET Framework (sur lequel s'appuient toutes les versions .NET Framework actuelles et futures). À ce jour, il n'y a aucune indication de la part de Microsoft que le support SWF sera bientôt supprimé du .NET Framework.
Espérons que cela aide.
C'est un peu le fromage que vous devez utiliser un composant Framework pré-3.0 pour obtenir une icône, mais comme Microsoft l'a expliqué, il n'y a pas de concept de System Tray dans WPF. WPF est une technologie de présentation et les icônes de notification sont un système d'exploitation (pas un concept de «présentation»).
Merci pour toutes les suggestions! Le WPF-NotifyIcon est ce que je vais faire, car un test rapide montre que c'est assez prometteur et indolore. –