2013-07-16 13 views
7

Desidero ridurre al minimo l'applicazione al vassoio di sistema utilizzando WPF. "NotifyIcon" è l'unico modo per ottenere questo risultato? In caso affermativo, quale spazio dei nomi è necessario per utilizzare "NotifyIcon" in WPF?Posso usare NotifyIcon in WPF?

Se possibile con "NotifyIcon", fornire qualche suggerimento, come posso utilizzarlo nella mia finestra principale?

mia finestra principale è,

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

Penso che questo è un duplicato http://stackoverflow.com/questions/10230579/easiest-way-to-have-a-program-minimize-itself-to-the-system-tray-using-net-4 – Swift

risposta

17

NotifyIcon non è implementato in WPF in quanto è in forme, ma è comunque possibile utilizzare il Windows Form NotifyIcon, risiede nelle System.Windows .Forme namspace.

Date un'occhiata a questi tutorial, potrebbero coprire le vostre esigenze:

soluzione semplice, utilizzando direttamente NotifyIcon: http://www.abhisheksur.com/2012/08/notifyicon-with-wpf-applications.html

Più soluzione avanzata, nuova biblioteca in base a NotifyIcon con più funzioni: http://www.codeproject.com/Articles/36468/WPF-NotifyIcon

Maggiori informazioni su NotifyIcon può essere trovato qui: http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

+1

Grazie. Dopo aver aggiunto System.Windows.Forms e System.Drawing (per Icon) nei riferimenti dell'applicazione, funziona correttamente. – Dinesh

+0

Buono a sapersi :) –

7

Sì, è possibile, e l'ho usato con successo nel mio progetto personale. C'è un controllo eccellente scritto da Philip Sumi http://www.hardcodet.net/projects/wpf-notifyicon. Ho usato quello preciso e funziona davvero alla grande e sembra bello (soggettivo).

image

Basta notare: prestare attenzione le condizioni di licenza, verificare se è possibile utilizzarlo in progetto.

+0

Ho visto il link che hai citato nella descrizione. Ma, non capisco, come potrei usarlo nella mia finestra View? – Dinesh

+0

@Dinesh: è necessario utilizzarlo come un controllo WPF. Non è qualcosa che può essere spiegato in breve risposta qui. Scarica il codice, esegui un esempio e guarda come viene utilizzato. – Tigran

+0

Per creare NotifyIcon, quale spazio dei nomi dovrei usare? – Dinesh

2

È possibile impostare il codice per il 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; 
     } 
    } 
} 

e nel tuo Mainwindow.xaml.cs:

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

Assicurarsi che sia Window_Closing binded alla chiusura evento della finestra principale.

Se "chiudi" la finestra principale, la visibilità della finestra sarà impostata su nascosta ma l'app sarà ancora in esecuzione. Semplice click sul NotifyIcon nell'area di notifica e c'è la tua finestra indietro.

Problemi correlati