首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >只有一个托盘图标的WPF应用程序

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

Stack Overflow用户
提问于 2009-09-24 15:59:18
回答 1查看 119.4K关注 0票数 153

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

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

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

有什么提示吗?

EN

回答 1

Stack Overflow用户

发布于 2009-09-25 06:41:09

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

我在GitHub上使用System.Windows.Forms NotifyIcon组件的代码,代码可以在https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs上查看

以下是摘要位:

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

在类级别:

代码语言:javascript
复制
private System.Windows.Forms.NotifyIcon notifyIcon = null;

在OnInitialize()期间:

代码语言:javascript
复制
notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];

在OnLoaded()期间:

代码语言:javascript
复制
notifyIcon.Visible = true;

对于交互(如上面的notifyIcon.Click和DoubleClick所示):

代码语言:javascript
复制
void notifyIcon_Click(object sender, EventArgs e)
{
    ShowQuickLaunchMenu();
}

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

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

希望这能有所帮助。

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

票数 115
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1472633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档