我想快速给WPF程序添加托盘菜单
我想快速给WPF程序添加托盘菜单

1 简单要求:
- 使用开源控件库
- 在XAML中声明托盘菜单,就像给控件添加ContextMenu一样
- 封装了常用命令,比如:打开主窗体、退出应用程序等

我在TerminalMACS中添加了托盘菜单,最终实现的托盘菜单效果:


2 如何做?
【Step 1】在已创建的WPF项目中,添加HandyControl库,并安装:

你问我为什么要使用HC控件库?先看Demo效果:



常用的托盘效果应该都能满足了吧?而实现这些效果,我们自己要码的代码真的不多,因为HC已经封装了,我们直接使用即可。
【Step 2】在窗体中添加HandyControl命名空间
xmlns:hc="https://handyorg.github.io/handycontrol"
【Step 3】声明托盘菜单关键的19行代码
<hc:NotifyIcon x:Name="NotifyIconContextContent"
Text="{markup:I18n {x:Static i18NResources:Language.AppTitle}}"
Visibility="Visible"
Icon="/Images/logo.ico">
<hc:NotifyIcon.ContextMenu>
<ContextMenu>
<MenuItem Command="hc:ControlCommands.PushMainWindow2Top" Header="{markup:I18n {x:Static i18NResources:Language.PushMainWindow2Top}}"/>
<MenuItem Command="hc:ControlCommands.ShutdownApp" Header="{markup:I18n {x:Static i18NResources:Language.Exit}}"/>
</ContextMenu>
</hc:NotifyIcon.ContextMenu>
<hc:Interaction.Triggers>
<hc:EventTrigger EventName="Click">
<hc:EventToCommand Command="hc:ControlCommands.PushMainWindow2Top"/>
</hc:EventTrigger>
</hc:Interaction.Triggers>
</hc:NotifyIcon>
上面的代码,一个托盘菜单基本上算完事了,简单说一下:
- NotifyIcon为托盘菜单控件,Text显示托盘菜单名称,将鼠标放在托盘图标上,ToolTip显示该字符串,一般显示应用程序名称,如下图:

- hc:NotifyIcon.ContextMenu 用于声明菜单项,本项目目前加了打开主窗体、退出应用程序两个菜单,而这两个菜单对应的命令HC已经封装,方便使用。
- 另外,单击托盘菜单,也可弹出应用程序主窗口
【Step 4】手动关闭主窗体时,隐藏而不退出
添加了托盘菜单后,在关闭主窗体时,应该重写OnClosing事件,隐藏主窗体,而不是直接关闭它。
protected override void OnClosing(CancelEventArgs e)
{
this.Hide();
e.Cancel = true;
}
3 更多参考
更多Demo源码请参考 HandyControl
本文源码TerminalMACS
我想快速给WPF程序添加托盘菜单的更多相关文章
- 为 WPF 程序添加 Windows 跳转列表的支持
原文:为 WPF 程序添加 Windows 跳转列表的支持 Windows 跳转列表是自 Windows 7 时代就带来的功能,这一功能是跟随 Windows 7 的任务栏而发布的.当时应用程序要想用 ...
- 为WPF程序添加字体
很多时候我们开发的程序可能会在多个版本的Windows上运行,比如XP.Win7.Win8. 为了程序美观,现在很多公司会使用WPF作为程序的界面设计. 跨版本的操作的操作系统往往有一些字体上的问题, ...
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
源代码:http://download.csdn.net/detail/nuptboyzhb/4137784 1. 导入一个托盘图标的资源(.ico)格式:资源ID为IDI_ICON1 2 ...
- 如何将程序添加到Windows桌面右键菜单
在Windows桌面上右键单击鼠标时,将显示默认菜单.如果您想要将其它程序添加到Windows桌面右键菜单中,则可以按照以下步骤执行: 运行WinUtilities上下文菜单管理器 点击添加 选择菜单 ...
- WPF:如何为程序添加splashScreen?
原文:WPF:如何为程序添加splashScreen? 大家是否还记得在Windows Forms程序中如何实现splashScreen吗?我们一般都会使用Microsoft.VisualBasic. ...
- WPF程序中App.Config文件的读与写
WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...
- win+r 快速启动应用程序
如何使用WIN+R快捷键快速启动应用程序呢?其实很简单 首先随便在一个盘上建一个新文件夹,随便取什么名字,最好是英文格式,小编以D盘为例,如图 2. 打开文件夹,单击右键,选择“新建”,单击“快捷方式 ...
- 011.Adding Search to an ASP.NET Core MVC app --【给程序添加搜索功能】
Adding Search to an ASP.NET Core MVC app 给程序添加搜索功能 2017-3-7 7 分钟阅读时长 作者 本文内容 1.Adding Search by genr ...
- Zara带你快速入门WPF(4)---Command与功能区控件
前言:许多数据驱动的应用程序都包含菜单和工具栏或功能区控件,允许用户控制操作,在WPF中,也可以使用功能区控件,所以这里介绍菜单和功能区控件. 一.菜单控件 在WPF中,菜单很容易使用Menu和Men ...
- 只需 5 秒钟,你就能取到 WPF 程序的超高分辨率超高清截图
我想要截取一个 WPF 程序的图标,但是它太小了.如果我就这样截屏截下来,是很不高清的.由于我需要制作一份课件,所以我需要超高清版本,可是,如何做才能最快速拿到 WPF 程序的超高清截图呢? 本文分享 ...
随机推荐
- Scrapy爬虫文件代码基本认识和细节解释
import scrapy from scrapy.http.request import Request from scrapy.http.response.html import HtmlResp ...
- 3D网站LOGO动画
相关技术和实现分析 3D模型 帧动画 threejs 推荐用blender创建3d模型,k帧实现从上到下翻转的帧动画 threejs 中执行帧动画,并关联滚动条 threejs 模型材质 Blende ...
- pytest框架学习-前置和后置setup和teardown
前置和后置 (1)setup和teardown,方法级 写在类中 方法级,每个用例都会执行setup和teardown. 相当于setup_method和teardown_method (2)setu ...
- pwd详解
linux下pwd 命令详解 Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就 ...
- [Python急救站]学生管理系统链接数据库
相信很多人在初学Python的时候,经常最后作业就是完成一个学生管理系统,但是我们来做一个完美的学生管理系统,并且将数据储存到数据库里. 我们先看看我们的数据库怎么设置. 首先呢,我选择用的是SQL ...
- 赶在520之前,程序员如何用Python送上最特别的“我爱你”表白
摘要:每到情人节.七夕节,不少小伙伴大伙伴们都会遇到这样一个世纪问题--怎么给女朋友/老婆一个与众不同的节日惊喜.今天给大家分享一个独特的表白方法--用"我爱你"拼出心爱人的模样! ...
- 当 BACnet 遇上 IoT,你将体验到不一样的大楼
本文分享自华为云社区<当 BACnet 遇上 IoT>,作者:美码师zale . 引言 在十四五规划中,"新基建"无疑是倍受关注的重点领域.而关于"新基建&q ...
- 性能达1.5+倍!昇腾AI助力分子动力学模拟研究
摘要:在异构计算架构CANN的助力下,AI预测性能达到现有产品的1.5+倍,可预测规模较传统方法提升10000+倍,为光伏材料.新能源电池.半导体材料研究带来巨大的商业应用价值. 本文分享自华为云社区 ...
- 详解物联网Modbus通讯协议
摘要:Modbus是当前非常流行的一种通讯协议. 本文分享自华为云社区<一文搞懂物联网Modbus通讯协议丨[拜托了,物联网!]>,作者: jackwangcumt. 1 概述 随着IT技 ...
- Hugging News #0203: 3.3 MB 的文生图模型、RHLF 训练框架、手机上能跑的 Transformer
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...