一 基本功能

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 使用或者什么原因。

 
8.效果

二 加入右键菜单
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.效果

 

最新文章

  1. (2016弱校联盟十一专场10.3) B.Help the Princess!
  2. 性能:CPU、Memory、耗电量
  3. SSH服务器与Android通信(1)--服务器端发送数据
  4. 学习 java命令
  5. php的特性
  6. java多线程(三)——锁机制synchronized(同步语句块)
  7. ArcGIS中的style样式的使用
  8. <global-results>怎么用
  9. intval()和(int)转换使用与区别
  10. 经典K线组合图解 > 正文
  11. 【HDOJ】2333 Assemble
  12. cocos2d-x游戏开发系列教程-坦克大战游戏之坦克和地图碰撞的检测下
  13. Ext JS 6学习文档–第1章–ExtJS入门指南
  14. CoordinatorLayout
  15. 关于Elasticsearch 使用 MatchPhrase搜索的一些坑
  16. Java数组协变与范型不变性
  17. TensorFlow数据读取
  18. sublime text3 下配置python3!
  19. [leetcode.com]算法题目 - Pow(x, n)
  20. Docker容器学习与分享02

热门文章

  1. Linux :: vi E212: Can't open file for writing
  2. plsql连接oracal数据库
  3. 提示框的优化之自定义Toast组件之(二)Toast组件的业务逻辑实现
  4. Android Service(上)
  5. iOS 关于tableView中有多个textField,输入框被遮住的解决方法
  6. 01 日志组件XLog
  7. (原+转)VS2013:正在从以下位置加载符号
  8. html5增强元素--续
  9. IOS开发之动态获取模型的属性值
  10. DropBox与Box的区别,包括直接的投资人的评价(本地Sync可能还是挺重要的)