使用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); } 

您还可以覆盖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); } } 

您不需要使用OnStateChanged() 。 而是使用PreviewClosed事件。

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