web-dev-qa-db-fra.com

Puis-je utiliser NotifyIcon dans WPF?

Je souhaite minimiser l'application sur la barre d'état système à l'aide de WPF. Est-ce que "NotifyIcon" est le seul moyen d'atteindre ce résultat? Si oui, quel espace de noms est requis pour utiliser "NotifyIcon" dans WPF?

Si possible avec "NotifyIcon", veuillez fournir un indice, comment puis-je l'utiliser dans ma fenêtre principale?

Ma fenêtre principale est,

public partial class MonthView : MetroWindow
{

    public DateTime SelectedDate { get; set; }

    public MonthView()
    {

            InitializeComponent();
            calMain.DisplayDate = DateTime.Today;
            Globals._globalController = new AppController();
            Globals._globalController.appTaskManager.setupLocal();
            Globals._globalController.setMonthViewWindow(this);

    }

    public void calItemSelectedDate(object sender, SelectionChangedEventArgs e)
    {
        DateTime d;
        if (sender is DateTime)
        {
            d = (DateTime)sender;
        }
        else
        {
            DateTime.TryParse(sender.ToString(), out d);
        }

        SelectedDate = d;

        ShowActivity(d);
     }

    public void ShowActivity(DateTime date)
    {
        DayView Activity = new DayView(date);
        Activity.Show();
        this.Hide();
    }

    private void SetButton_Click(object sender, RoutedEventArgs e)
    {
        SettingsView set = new SettingsView();
        set.Show();
        this.Hide();
    }

 }
13
Dinesh

NotifyIcon n'est pas implémenté dans WPF comme dans Forms, mais vous pouvez toujours utiliser le Windows Form NotifyIcon , il réside dans le System.Windows.Forms namspace.

Jetez un œil à ces tutoriels, ils pourraient couvrir vos besoins:

Solution simple, utilisant directement NotifyIcon: http://www.abhisheksur.com/2012/08/notifyicon-with-wpf-applications.html

Solution plus avancée, nouvelle bibliothèque basée sur NotifyIcon avec plus de fonctionnalités: http://www.codeproject.com/Articles/36468/WPF -NotifyIcon

Plus d'informations sur NotifyIcon peuvent être trouvées ici: http://msdn.Microsoft.com/en-us/library/system.windows .forms.notifyicon.aspx

23
Jesper Jensen

Vous pouvez définir votre code pour NotifyIcon dans App.xaml.cs

using System.Drawing;

namespace DDD
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        System.Windows.Forms.NotifyIcon nIcon = new System.Windows.Forms.NotifyIcon();
        public App()
        {
            nIcon.Icon = new Icon(@"path to ico");
            nIcon.Visible = true;
            nIcon.ShowBalloonTip(5000, "Title", "Text",  System.Windows.Forms.ToolTipIcon.Info);
            nIcon.Click += nIcon_Click;
        }

        void nIcon_Click(object sender, EventArgs e)
        {
            //events comes here
            MainWindow.Visibility = Visibility.Visible;
            MainWindow.WindowState = WindowState.Normal;
        }
    }
}

Et dans votre Mainwindow.xaml.cs:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
        this.Visibility = Visibility.Hidden;
    }

Assurez-vous que Window_Closing est lié à l'événement de fermeture de la fenêtre principale.

Si vous "fermez" votre fenêtre principale, la visibilité de la fenêtre sera définie sur masquée, mais votre application sera toujours en cours d'exécution. Cliquez simplement sur NotifyIcon dans la zone de notification et votre fenêtre est de retour.

9
Stef Geysels

Oui, c'est possible et je l'ai utilisé avec succès dans mon projet personnel. Il existe un excellent contrôle écrit par Philip Sumi http://www.hardcodet.net/projects/wpf-notifyicon . J'ai utilisé précisément celui-là et il fonctionne vraiment bien et a l'air sympa (subjectif).

image

Remarque: faites attention aux conditions de licence, vérifiez si vous pouvez l'utiliser dans votre projet.

7
Tigran