ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

有什么提示吗?


J
James Westgate

WPF 没有 NotifyIcon。

我的一位同事使用这个免费提供的库效果很好:

http://www.hardcodet.net/wpf-notifyicon(博文)

https://github.com/hardcodet/wpf-notifyicon(源代码)

https://www.nuget.org/packages/Hardcodet.NotifyIcon.Wpf/(NuGet 包)

http://visualstudiogallery.msdn.microsoft.com/aacbc77c-4ef6-456f-80b7-1f157c2909f7/

https://i.stack.imgur.com/oEF0M.png


很棒的图书馆。迫不及待地想利用它!
德鲁,链接似乎在这里死了。你有这个图书馆的替代链接吗?我进行了快速搜索,但无法确定结果是否适用于同一项目。
@BradLarson,该网站似乎已关闭;但无论如何,该项目可以作为 Nuget 包使用(参见 Dale 的回答)
尽管有大量的选票,但这个答案并不构成有用的、合法的 Stack Overflow 答案。它实际上是一个仅链接的答案,与 Stack Overflow 标准相反。请通过在答案本身中提供具体的重要信息来改进此答案。这将确保无论外部站点的状态如何,信息都是可用的。
M
Mika Sundland

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

我在 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.Click 和 DoubleClick 所示):

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

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

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

希望有帮助。

您必须使用 3.0 之前的框架组件来获取托盘图标,这有点麻烦,但可以理解的是,正如 Microsoft 所解释的那样,在 WPF 范围内没有系统托盘的概念。 WPF 是一种演示技术,而通知图标是一种操作系统(不是“演示”)概念。


P
Peter Duniho

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

如果您想要一种快速简便的入门方法,请查看此 WPF NotifyIcon control on the Code Project,它根本不依赖 WinForms NotifyIcon。似乎有一个更新的版本 on the author's websiteNuGet package。到目前为止,这对我来说似乎是最好和最干净的方式。

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

一探究竟。它还附带了一个令人惊叹的示例应用程序,非常易于使用,并且您可以拥有漂亮的 Windows Live Messenger 风格的 WPF 弹出窗口、工具提示和上下文菜单。非常适合显示 RSS 提要,我将它用于类似目的。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅