WPF应用程序只有一个托盘图标

我是一个总的WPF新手,并怀疑是否有人可以给我一些指针如何编写一个应用程序,开始最小化托盘。 这个想法是,当有新的提要时,它定期提取一个RSS源并创build一个Toaster-Popup。

应用程序应该仍然有一个主窗口(本质上只是一个包含所有提要条目的列表),但是应该默认隐藏。

我已经开始阅读关于XAML和WPF,我知道App.xaml中的StartupUri必须指向我的主窗口,但我不知道如何正确的方法来做SysTray图标并隐藏主窗口(这也是意味着当用户最小化窗口时,它应该最小化到托盘,而不是任务栏)。

任何提示?

您必须使用System.Windows.Forms中的NotifyIcon控件,或者您也可以使用Windows API提供的Notify Icon API。 WPF不提供这样的等价物,并且已经在Microsoft Connect上多次要求它。

我有CodePlex上的代码使用WPF应用程序中的System.Windows.Forms NotifyIcon组件,代码可以在http://mubox.codeplex.com/SourceControl/changeset/view/64743#1119066

这里是汇总位:

使用ShowInTaskbar = False创build一个WPF窗口,并在非可见状态下加载该窗口。

在课堂上:

 private System.Windows.Forms.NotifyIcon notifyIcon = null; 

在OnInitialize()中:

 notifyIcon = new System.Windows.Forms.NotifyIcon(); notifyIcon.Click += new EventHandler(notifyIcon_Click); notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick); notifyIcon.Icon = IconHandles["QuickLaunch"]; 

在OnLoaded()中:

 notifyIcon.Visible = true; 

和交互(如上面显示的notifyIcon.Click和DoubleClick):

 void notifyIcon_Click(object sender, EventArgs e) { ShowQuickLaunchMenu(); } 

从这里您可以继续使用WPF控件和API,如上下文菜单,popup窗口等。

就这么简单。 您并不需要一个WPF窗口来托pipe组件,它只是将一个WPF应用程序引入WPF应用程序的最方便的方法(因为窗口通常是通过App.xaml定义的默认入口点),同样,不需要WPF包装器或第三方控件,因为SWF组件保证存在于任何.NET Framework安装中,它也具有WPF支持,因为它是.NET Framework的一部分(所有当前和将来的.NET Framework版本都基于此)。到目前为止,微软没有任何迹象表明,SWF支持将很快从.NET Framework中删除。

希望有所帮助。

这是一个小奶酪,你必须使用3.0以前的框架组件才能得到一个托盘图标,但可以理解的是,正如微软解释过的那样,在WPF的范围内没有系统托盘的概念。 WPF是一种演示技术,通知图标是一个操作系统(而不是“演示”)的概念。

我最近有这个相同的问题。 不幸的是,NotifyIcon目前只是一个Windows.Forms控件,如果你想使用它,你将不得不包含框架的这一部分。 我想这取决于你有多lessWPF纯粹主义者。

如果你想要一个快速简单的入门方法,请查看代码项目上的WPF NotifyIcon控件 ,它完全不依赖于WinForms NotifyIcon。 更新的版本似乎可以在作者的网站上获得,并作为一个NuGet包 。 这对我来说似乎是迄今为止最好和最干净的方式。

  • 丰富的工具提示,而不是文本
  • WPF上下文菜单和popup窗口
  • 命令支持和路由事件
  • 灵活的数据绑定
  • 丰富的气球消息,而不是操作系统提供的默认消息

一探究竟。 它带有一个惊人的示例应用程序,非常容易使用,并且您可以看到Windows Live Messenger风格的WPFpopup窗口,工具提示和上下文菜单。 显示RSS提要的最佳select,我将其用于类似的目的。