2013-07-16 4 views
7

Ich möchte Anwendung auf System-Tray mit WPF minimieren. Ist "NotifyIcon" der einzige Weg, um dieses Ergebnis zu erzielen? Wenn ja, welcher Namespace wird für die Verwendung von "NotifyIcon" in WPF benötigt?Kann ich NotifyIcon in WPF verwenden?

Wenn möglich mit "NotifyIcon", bitte geben Sie einen Hinweis, wie kann ich das in meinem Hauptfenster verwenden?

Mein Hauptfenster ist,

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(); 
    } 

} 
+0

Ich denke, das ist ein Duplikat http://stackoverflow.com/questions/10230579/easiest-way-to-have-a-program-minimize-its-the-system-tray-using-net-4 – Swift

Antwort

17

NotifyIcon nicht in WPF implementiert, wie es in Forms ist, aber Sie können immer noch die Windows Form verwenden NotifyIcon, es in den System.Windows wohnt .Forms namespace.

Werfen Sie einen Blick auf diese Tutorials, könnten sie Ihre Bedürfnisse abdecken:

Einfache Lösung, direkt NotifyIcon mit: http://www.abhisheksur.com/2012/08/notifyicon-with-wpf-applications.html

Fortgeschrittenere Lösung, neue Bibliothek basiert auf NotifyIcon mit mehr Funktionen: http://www.codeproject.com/Articles/36468/WPF-NotifyIcon

Mehr Infos über NotifyIcon finden Sie hier: http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

+1

Danke. Nach dem Hinzufügen von System.Windows.Forms und System.Drawing (für Symbol) in den Verweisen der Anwendung funktioniert es einwandfrei. – Dinesh

+0

Gut zu hören :) –

7

Ja, es ist möglich, und ich habe es mit Erfolg in meinem persönlichen Projekt verwendet. Es gibt eine ausgezeichnete Kontrolle geschrieben von Philip Sumi http://www.hardcodet.net/projects/wpf-notifyicon. Ich habe genau das benutzt und es funktioniert wirklich gut und sieht gut aus (subjektiv).

image

Nur beachten Sie: Beachten Lizenzbedingungen, überprüfen Sie, wenn Sie es in Ihre Projekt verwenden können.

+0

Ich habe den Link gesehen, den Sie in der Beschreibung erwähnt haben. Aber ich verstehe nicht, wie kann ich das in meinem View-Fenster verwenden? – Dinesh

+0

@Dinesh: Sie müssen es wie ein WPF-Steuerelement verwenden. Es ist nicht etwas, das hier kurz erklärt werden kann. Laden Sie den Code herunter, führen Sie ein Beispiel aus und sehen Sie, wie es verwendet wird. – Tigran

+0

Zum Erstellen von NotifyIcon, welchen Namespace soll ich verwenden? – Dinesh

2

Sie können den Code für die NotifyIcon in 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; 
     } 
    } 
} 

Und in Ihrem Mainwindow.xaml.cs gesetzt:

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

Vergewissern Sie sich, dass Window_Closing dem Schließen binded wird Ereignis des Hauptfensters.

Wenn Sie Ihr Hauptfenster "schließen", wird die Fenstersichtbarkeit ausgeblendet, aber Ihre App wird weiterhin ausgeführt. Klicken Sie einfach auf die NotifyIcon im Infobereich und dort ist Ihr Fenster zurück.

Verwandte Themen