关闭系统托盘的应用程序

时间:2014-04-23 00:34:52

标签: wpf system-tray

我有一个只有退出“X”按钮的WPF应用程序。应用程序启动时会启动系统托盘图标。当单击“X”时,我想“隐藏”或关闭主窗口到系统托盘。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您需要做的主要事情是将ShutdownMode的{​​{1}}更改为Application。您可以在OnExplicitShutdown中设置它,然后应用程序将保持活动状态,直到您从代码中调用App.xaml(可能基于某些显式用户命令)。如何处理从托盘图标重新打开窗口取决于您的具体实现,但这至少应该让您开始。

答案 1 :(得分:1)

如果您重新考虑不愿意使用外部组件,我建议使用WPF NotifyIcon。我已经用过了。它很简单,效果很好。

它不仅仅依赖于相应的WinForms组件,而且是一个纯粹的独立控件,它利用WPF框架的几个功能来显示丰富的工具提示,弹出窗口,上下文菜单和气球消息。如果按[x]

,你也可以在Closing Event处理

代码示例:

public partial class MainWindow : Window
{

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


    }

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == WindowState.Minimized) 
            this.Hide();

        base.OnStateChanged(e);
    }
}


/// <summary>
/// Handles a click on the notify icon or its balloon.
/// </summary>
/// <param name="sender">Event source.</param>
/// <param name="e">Event arguments.</param>
private void HandleNotifyIconOrBalloonClicked(object sender, EventArgs e)
{
   // Restore the Window
   _window.WindowState = WindowState.Normal;
}