仅具有托盘图标的WPF应用程序

时间:2009-09-24 15:59:18

标签: c# .net wpf xaml

我是一个完整的WPF新手,并想知道是否有人可以给我一些指示如何编写一个开始最小化到托盘的应用程序。我们的想法是,它会定期提取RSS Feed,并在有新的Feed时创建Toaster-Popup。

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

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

任何提示?

3 个答案:

答案 0 :(得分:106)

答案 1 :(得分:93)

您必须使用System.Windows.Forms中的NotifyIcon控件,或者您可以使用Windows API提供的Notify Icon API。 WPF不提供此类等效项,并且已多次在Microsoft Connect上请求它。

我在GitHub上有代码,它在WPF应用程序中使用System.Windows.Forms NotifyIcon Component,代码可以在https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs查看

以下是摘要位:

使用ShowInTaskbar = False创建一个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,例如上下文菜单,弹出窗口等。

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

希望有所帮助。

这是一个小奶酪,您必须使用3.0之前的Framework Framework来获取托盘图标,但可以理解的是,正如Microsoft已经解释过的那样,WPF范围内没有系统托盘的概念。 WPF是一种表示技术,而通知图标是一种操作系统(不是“演示”)概念。

答案 2 :(得分:48)

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

如果您想要快速简便的入门方式,请查看完全不依赖于WinForms NotifyIcon的WPF NotifyIcon control on the Code Project。最近的版本似乎可用on the author's websiteNuGet package。到目前为止,这似乎是对我来说最好,最干净的方式。

  
      
  • 丰富工具提示而非文字
  •   
  • WPF上下文菜单和弹出窗口
  •   
  • 命令支持和路由事件
  •   
  • 灵活的数据绑定
  •   
  • 富气球消息而非默认消息由。提供   OS
  •   

检查出来。它还带有一个惊人的示例应用程序,非常易于使用,您可以拥有漂亮的Windows Live Messenger样式WPF弹出窗口,工具提示和上下文菜单。非常适合显示RSS提要,我将其用于类似目的。