2013-07-16 27 views
7

Chcę zminimalizować aplikację do zasobnika systemowego za pomocą WPF. Czy "NotifyIcon" jest jedynym sposobem osiągnięcia tego wyniku? Jeśli tak, jaka przestrzeń nazw jest wymagana do używania "NotifyIcon" w WPF?Czy mogę używać narzędzia NotifyIcon w WPF?

Jeśli jest to możliwe z "PowiadomIcon", proszę podać podpowiedź, w jaki sposób mogę użyć tego w moim Mainwindow?

Moje główne okno jest

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

Myślę, że jest to duplikat http://stackoverflow.com/questions/10230579/easiest-way-to-have-a-program-minimize-self-to-system-tray-using-net-4 – Swift

Odpowiedz

17

NotifyIcon nie jest realizowany w WPF, jak to jest w formach, ale można nadal korzystać z Windows Form NotifyIcon, to tkwi w System.Windows .Forms namspace.

Spójrz na tych tutoriali, mogą pokryć swoje potrzeby:

proste rozwiązanie, bezpośrednio za pomocą NotifyIcon: http://www.abhisheksur.com/2012/08/notifyicon-with-wpf-applications.html

bardziej zaawansowane rozwiązania, nową bibliotekę na podstawie NotifyIcon więcej funkcji: http://www.codeproject.com/Articles/36468/WPF-NotifyIcon

Więcej informacji o NotifyIcon można znaleźć tutaj: http://msdn.microsoft.com/en-us/library/system.windows.forms.notifyicon.aspx

+1

Dzięki. Po dodaniu System.Windows.Forms i System.Drawing (dla Icon) w referencjach aplikacji, działa dobrze. – Dinesh

+0

Dobrze usłyszeć :) –

7

Tak, jest to możliwe i użyłem go z powodzeniem w moim osobistym projekcie. Istnieje doskonała kontrola napisana przez Philipa Sumi http://www.hardcodet.net/projects/wpf-notifyicon. Użyłem tego dokładnie i działa naprawdę świetnie i ładnie wygląda (subiektywnie).

image

Tylko uwaga: należy zwrócić uwagę warunki licencjonowania, sprawdź czy można go używać w projektu.

+0

Widziałem link, który wspomniałeś w opisie. Ale nie rozumiem, jak mogę tego użyć w moim oknie widoku? – Dinesh

+0

@ Dinesh: musisz go używać jak formantu WPF. To nie jest coś, co można wyjaśnić w krótkiej odpowiedzi tutaj. Pobierz kod, uruchom próbkę i zobacz, jak jest używana. – Tigran

+0

Aby utworzyć narzędzie NotifyIcon, której przestrzeni nazw powinienem użyć? – Dinesh

2

Można ustawić swój kod do NotifyIcon w 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; 
     } 
    } 
} 

iw swoim Mainwindow.xaml.cs:

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

Upewnij się, że Window_Closing jest binded do zamknięcia wydarzenie z głównego okna.

Jeśli "zamkniesz" swoje główne okno, widoczność okna zostanie ukryta, ale Twoja aplikacja będzie nadal działać. Wystarczy kliknąć na NotifyIcon w obszarze powiadomień i pojawi się okno.

Powiązane problemy