2014-12-03 3 views
8

Я хочу добавить приложение в системный лоток, когда пользователь минимизирует или закрывает форму. Я сделал это для случая «Минимизировать». Может ли кто-нибудь сказать мне, как я могу сохранить приложение и добавить его в системный лоток, когда я закрою форму?Минимизация/закрытие приложения в системный лоток с использованием WPF

public MainWindow() 
    { 
     InitializeComponent(); 
     System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon(); 
     ni.Icon = new System.Drawing.Icon(Helper.GetImagePath("appIcon.ico")); 
     ni.Visible = true; 
     ni.DoubleClick += 
      delegate(object sender, EventArgs args) 
      { 
       this.Show(); 
       this.WindowState = System.Windows.WindowState.Normal; 
      }; 
     SetTheme(); 
    } 

    protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == System.Windows.WindowState.Minimized) 
      this.Hide(); 
     base.OnStateChanged(e); 
    } 
+1

Я Recommand вам: https://visualstudiogallery.msdn.microsoft.com/aacbc77c-4ef6-456f-80b7-1f157c2909f7/ – Xaruth

ответ

1

Не нужно использовать OnStateChanged(). Вместо этого используйте событие PreviewClosed.

public MainWindow() 
{ 
    ... 
    PreviewClosed += OnPreviewClosed; 
} 

private void OnPreviewClosed(object sender, WindowPreviewClosedEventArgs e) 
{ 
    m_savedState = WindowState; 
    Hide(); 
    e.Cancel = true; 
} 
4

Вы также можете переопределить OnClosing сохранить приложение работает и минимизировать его в системный трей, когда пользователь закрывает приложение.

MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow(App application) 
    { 
     InitializeComponent(); 
    } 

    // minimize to system tray when applicaiton is minimized 
    protected override void OnStateChanged(EventArgs e) 
    { 
     if (WindowState == WindowState.Minimized) this.Hide(); 

     base.OnStateChanged(e); 
    } 

    // minimize to system tray when applicaiton is closed 
    protected override void OnClosing(CancelEventArgs e) 
    { 
     // setting cancel to true will cancel the close request 
     // so the application is not closed 
     e.Cancel = true; 

     this.Hide(); 

     base.OnClosing(e); 
    } 
}