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

我是一个完全 WPF 的新手,不知道是否有人可以给我一些指南,如何编写一个应用程序,开始最小化托盘。其思想是,它定期获取一个 RSS 提要,并在有新提要时创建一个 Toaster-Popup。

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

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

有线索吗?

124866 次浏览

我最近也遇到了同样的问题。不幸的是,NotifyIcon 只是一个 Windows。现在的表单控件,如果您想要使用它,就必须包含框架的这一部分。我想这取决于你是多么的 WPF 纯粹主义者。

如果你想要一个快速简单的入门方法,看看这个根本不依赖 WinForms NotifyIcon 的 < strong > WPF NotifyIcon 控件 关于代码项目。一个更新的版本似乎是可用的 在作者的网站上和作为一个 NuGet 软件包。在我看来,这是目前为止最好也是最干净的方法了。

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

看看这个。它还附带了一个非常棒的示例应用程序,非常容易使用,而且你可以拥有非常漂亮的 Windows Live Messenger 样式的 WPF 弹出窗口、工具提示和上下文菜单。非常适合显示 RSS 提要,我也是为了类似的目的使用它。

必须使用 System 中的 NotifyIcon 控件。窗户。窗体,或者也可以使用 WindowsAPI 提供的 NotifyIconAPI。WPF 没有提供这样的等价物,并且已经在 MicrosoftConnect 上多次请求它。

我在 GitHub 上有代码,它使用了 WPF 应用程序中的 System.Windows.Forms NotifyIcon 组件,代码可以在 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 所示,单击并双击) :

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

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

就这么简单。你并不需要一个 WPF 窗口来托管这个组件,这只是将一个 WPF 窗口引入到 WPF 应用程序中的最方便的方式(因为一个 Window 通常是通过 App.xaml 定义的默认入口点) ,同样,你也不需要 WPF 包装器或第三方控件,因为 SWF 组件肯定存在于任何组件中。NET 框架安装,它也支持 WPF,因为它是。NET 框架(其中所有当前和未来。NET Framework 版本构建在此基础上。)迄今为止,微软没有表示将从。NET 框架。

希望能帮上忙。

这是一个小奶酪,你必须使用前3.0框架组件得到一个托盘图标,但可以理解,因为微软已经解释了,没有系统托盘的概念范围内的 WPF。WPF 是一种表示技术,通知图标是一种操作系统(而非“表示”)概念。