WPF实现窗体最小化后小图标在右边任务栏下
一 基本功能
1. 这里是用 NotifyIcon 控件来实现,但 WPF 下没有 NotifyIcon 控件,怎么办,用 WinForm 下的呗。
先引用 .NET 自带的两个程序集
System.Windows.Forms 是用来使用 NotifyIcon 控件的;
System.Drawing 是用来引用图标文件的

2. 图标

3. 设置图标属性

4.这里很重要,因为程序运行后,会在运行程序目录下去找图标文件,这样设置后就会在应用程序目录下生成对应的文件,如果不设置,到时候出错就找不到原因,反正这里我是搞了几个小时才发现这里要这样设置的。

5. 设置窗体的 StateChanged="Window_StateChanged_1" 事件

6.代码
using System.Windows.Forms;
using System.IO; WindowState ws;
WindowState wsl;
NotifyIcon notifyIcon; public MainWindow()
{
InitializeComponent(); icon(); //保证窗体显示在上方。
wsl = WindowState;
} private void icon()
{
string path = System.IO.Path.GetFullPath(@"Icon\013.ico");
if (File.Exists(path))
{
this.notifyIcon = new NotifyIcon();
this.notifyIcon.BalloonTipText = "Hello, 文件监视器"; //设置程序启动时显示的文本
this.notifyIcon.Text = "文件监视器";//最小化到托盘时,鼠标点击时显示的文本
System.Drawing.Icon icon = new System.Drawing.Icon(path);//程序图标
this.notifyIcon.Icon = icon;
this.notifyIcon.Visible = true;
notifyIcon.MouseDoubleClick += OnNotifyIconDoubleClick;
this.notifyIcon.ShowBalloonTip();
} } private void OnNotifyIconDoubleClick(object sender, EventArgs e)
{
this.Show();
WindowState = wsl;
} private void Window_StateChanged_1(object sender, EventArgs e)
{
ws = this.WindowState;
if (ws == WindowState.Minimized)
{
this.Hide();
}
}
7. 如果您要设置窗体的图标,最好不要设置为 Icon\013.ico 要不然会出错,我猜想这里应该是 Icon\013.ico 这个图标已经被 NotifyIcon 使用或者什么原因。

二 加入右键菜单
1. 在 WinForm实现窗体最小化后小图标在右边任务栏下 中我是用 ContextMenuStrip 控件来加了,但 WPF 没有这个控件,和上面同样的办法
#region 托盘右键菜单
private void contextMenu()
{
ContextMenuStrip cms = new ContextMenuStrip(); //关联 NotifyIcon 和 ContextMenuStrip
notifyIcon.ContextMenuStrip = cms; System.Windows.Forms.ToolStripMenuItem exitMenuItem = new System.Windows.Forms.ToolStripMenuItem();
exitMenuItem.Text = "退出";
exitMenuItem.Click += new EventHandler(exitMenuItem_Click); System.Windows.Forms.ToolStripMenuItem hideMenumItem = new System.Windows.Forms.ToolStripMenuItem();
hideMenumItem.Text = "隐藏";
hideMenumItem.Click += new EventHandler(hideMenumItem_Click); System.Windows.Forms.ToolStripMenuItem showMenuItem = new System.Windows.Forms.ToolStripMenuItem();
showMenuItem.Text = "显示";
showMenuItem.Click += new EventHandler(showMenuItem_Click); cms.Items.Add(exitMenuItem);
cms.Items.Add(hideMenumItem);
cms.Items.Add(showMenuItem);
} private void exitMenuItem_Click(object sender, EventArgs e)
{
notifyIcon.Visible = false; System.Windows.Application.Current.Shutdown();
} private void hideMenumItem_Click(object sender, EventArgs e)
{
this.Hide();
} private void showMenuItem_Click(object sender, EventArgs e)
{
this.Show();
this.Activate();
}
#endregion
2. 主菜单中加入这句话就可以
public MainWindow()
{
InitializeComponent(); //NotifyIcon
icon(); //ContextMenuStrip
contextMenu(); //保证窗体显示在上方。
wsl = WindowState; }
3.效果

WPF实现窗体最小化后小图标在右边任务栏下的更多相关文章
- WinForm实现窗体最小化后小图标在右边任务栏下
一 基本功能1. 首先新建一个窗体,然后拖入一个名为 NotifyIcon 的控件,名字我没有改,就那个名字 2. 我的应用程序下有些图标文件,这里我用这个图标,我选择 013.ico 3. 选择 ...
- c# 窗体最小化后截图实现
我们知道,当我们需要对Control进行截图时,我们可以使用Control.DrawToBitmap()进行截图, 那么问题来了,当我们的窗体最小化了,我们还怎么截图呢? 当窗体最小化的时候,我们知道 ...
- qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新
qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新 Widget wit ...
- Delphi: 模态窗体最小化
源起: 近期所介入的几个项目中,最后视频生成窗体,为一模态对话框.因生成时间可能较长,所以其窗体可以最小化,它最小化时同时最小化主程序,唤醒时主程序再复原. 代码亦是8年前本人所写,一直那样用了,也没 ...
- Windows 窗体最小化和隐藏的区别及恢复
应用程序有托盘图标,窗体最小化或者隐藏窗体时,点击托盘图标需要恢复窗体显示,并且恢复之前的现实状体,正常大小或者最大化显示.例如:最大化显示窗体时,点击最小化按钮,窗体最小化,点击托盘图标将最大化显示 ...
- easyui最小化后停留在页面的右下角
0.此方法没有什么技术含量,纯属于自己瞎想的!如果有的好方法,请留言告之谢谢!! 1.直接上代码: $('#winId').window({ onMinimize: function () { //最 ...
- delphi模态窗体最小化会隐藏的问题
在使用delphi创建模态窗体的时候最小化窗体会导致最小化的窗体不可见,再次点击主窗体才会显示. 在这个模态窗体中增加以下函数 procedure WmSysCommand(var msg: TMes ...
- winform最小化后重复进load事件原因
最近编写一个工具发现的问题,窗体不论是最小化还是进入托盘,重新打开的时候都会进入控件load事件. 产生这个现象的条件是: 1.使用了用户控件,在控件中使用了load事件 2.在主窗体中,隐藏或显示任 ...
- wpf 窗口最小化后,触发某事件弹出最小化窗口并置顶
//如果窗口最小化了弹出并置顶----事件触发调用 ShowWindowAsync(new System.Windows.Interop.WindowInteropHelper(CommonHelpe ...
随机推荐
- Javascript进阶篇——( JavaScript内置对象---下)--Array数组对象---笔记整理
Array 数组对象数组对象是一个对象的集合,里边的对象可以是不同类型的.数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的数组定义的方法: 1. 定义了一个空数组: var ...
- javascript正则简单入门
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- redhat换yum源
根据redhat操作系统版本及位数,下载对应centos的版本及位数的这些包: yum-3.2.22-40.el5.centos.noarch.rpm yum-fastestmirror-1.1.16 ...
- 如何更改 Mac OS X 系统默认用户名
说到 Mac 用户名估计有许多人都不知道在哪个地方修改,其实说简单也简单说麻烦也麻烦看你自己的需求.好比如果你只要用户名的登录更改,那是就非常简单的事了.下面这里就给大家介绍mac osx系统如何更改 ...
- C# using垃圾回收详解
简介 定义一个范围,将在此范围之外释放一个或多个对象. 语法 using (Font font1 = new Font("Arial", 10.0f)) { } C# 语言参考 主 ...
- JSON的parse()方法
JSON方法也可以接受另外的一个参数,作为还原函数. 实例: var book = { title:"JavaScript Learn", author:["wang&q ...
- numpy库:常用基本
numpy 本文主要列出numpy模块常用方法 大部分内容来源于网络,而后经过自己的一点思考和总结,如果有侵权,请联系我 我是一名初学者,有哪些地方有错误请留言,我会及时更改的 创建矩阵(采用ndar ...
- mysql innodb_double_write特性
知识储备: 1.mysql 的crasy recovery 是通过redo log 和undo log 来完成的: 2.redo log 和undo log的记录的是对页面的物理操作:如在1024号p ...
- 手把手教你学习FPGA系列视频教程_救护车鸣笛声
本套教程主要面对FPGA初学者,本次DIY活动不仅让初学者掌握FPGA硬件电路设计以及焊接方面的知识,更重要的是让初学者学习硬件描述语言 (VerilogHDL)描述数字电路,以及Quartus II ...
- 禁用物料不允许BOM
应用 Oracle Bill Of Materiel 层 Level Function 函数名 Funcgtion Name BOM_BOMFDBOM 表单名 Form Name BOMFDBOM ...