使用WPF最小化应用程序到系统托盘(不使用NotifyIcon)

时间:2013-02-05 05:13:31

标签: c# wpf windows wpf-controls notifyicon

我完成了我的应用程序,现在我希望将“最小化到系统托盘功能”中。我读了一篇好文章minimize app to system tray。我意识到这些都使用了Windows.Form类。

不幸的是,我使用Windows Presentation Foundation WPF reference来创建应用程序UI。现在我看到WPF中不支持NotifyIcon。我看到CodePlex上有一个开源库,它模拟了NotifyIcon属性WPF Contrib我还没有使用它。

现在我正在解决问题。以下是我的问题: -

a)我不想仅为一个组件合并第三方库。

b)我可以在WPF上没有NotifyIcon的情况下进行最小化功能吗?如果是,那么有人可以给我带来什么样的潜在客户吗?

或许我应该将我的UI还原为使用Windows Forms?

3 个答案:

答案 0 :(得分:29)

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

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

答案 1 :(得分:2)

我今天刚刚看过这篇文章。

作为参考,我也在一段时间后解决了这个问题。它工作得非常好,我偶尔会遇到一些问题,偶尔会出现一些多显示器设置。

这是在GITs和NuGets之前的事情,如果有兴趣,我会把它放在GIT回购中。

CodeProject Article Here

答案 2 :(得分:0)

这是一个线程,对我有很大帮助。

https://stackoverflow.com/a/12428063/10305444

public partial class Window : System.Windows.Window{


public Window()
{
    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);
}}