web-dev-qa-db-fra.com

Réduire l'application dans la zone de notification à l'aide de WPF (sans utiliser NotifyIcon)

J'ai fini de faire ma demande et je souhaite maintenant intégrer la fonction "Réduire au minimum dans la barre d'état système". J'ai lu un bon article minimiser l'application dans la barre d'état système . J'ai réalisé que ceux-ci utilisent la classe Windows.Form. 

Malheureusement, j'ai utilisé Windows Presentation Foundation Référence WPF pour créer l'interface utilisateur de mes applications. Maintenant, je vois que NotifyIcon n'est pas pris en charge dans WPF. Je vois qu’il existe une bibliothèque open source sur CodePlex qui simule les propriétés NotifyIcon WPF Contrib Je ne l’ai pas encore utilisée. 

Maintenant je suis dans une situation difficile. Voici mes questions: - 

a) Je ne veux pas incorporer une 3ème bibliothèque de parti pour un seul composant. 

b) Puis-je utiliser la fonction de réduction sans NotifyIcon sur WPF? Si oui, comment quelqu'un peut-il me donner des pistes s'il vous plaît?

Ou peut-être devrais-je rétablir mon interface utilisateur pour utiliser Windows Forms? 

20
rockstar

Si vous reconsidérez votre réticence à utiliser un composant externe, je vous recommande WPF NotifyIcon . Je l'ai utilisé. C'est simple et fonctionne bien.

Il ne s'appuie pas uniquement sur le composant WinForm correspondant, il s'agit d'un contrôle purement indépendant qui exploite plusieurs fonctionnalités du cadre WPF afin d'afficher des info-bulles riches, des fenêtres contextuelles, des menus contextuels et des messages bulle. 

29
Marksl

Je viens de tomber sur ce post aujourd'hui. 

Pour référence, j'ai également résolu ce problème il y a quelque temps. Cela fonctionne très bien et la seule fois où j'ai eu un petit problème est parfois sur certaines configurations multi-écrans. 

C’était avant que les GIT et les NuGets soient l’in-chose, je le placerai dans un dépôt GIT s’il ya un intérêt.

Article CodeProject ici

2
Murray Foxcroft

Voici un fil qui m'a beaucoup aidé.

https://stackoverflow.com/a/12428063/10305444

public partial class Window : System.Windows.Window{


public Window()
{
    InitializeComponent();

    System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
    ni.Icon = new System.Drawing.Icon("Main.ico");
    ni.Visible = true;
    ni.DoubleClick += 
        delegate(object sender, EventArgs args)
        {
            this.Show();
            this.WindowState = WindowState.Normal;
        };
}

protected override void OnStateChanged(EventArgs e)
{
    if (WindowState == WindowState.Minimized)
        this.Hide();

    base.OnStateChanged(e);
}}
0
Maifee Ul Asad