WPF实现窗体最小化后小图标在右边任务栏下

2017-08-04 19:38:18来源:CSDN作者:shikong_人点击

分享

一 基本功能

1. 这里是用 NotifyIcon 控件来实现,但 WPF 下没有 NotifyIcon  控件,怎么办,用 WinForm 下的呗。

先引用  .NET 自带的两个程序集 
System.Windows.Forms 是用来使用 NotifyIcon 控件的;
System.Drawing 是用来引用图标文件的

2. 图标

3. 设置图标属性

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

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

6.代码

  1. using System.Windows.Forms;
  2. using System.IO;
  3.  
  4. WindowState ws;
  5. WindowState wsl;
  6. NotifyIcon notifyIcon;
  7.  
  8. public MainWindow()
  9. {
  10. InitializeComponent();
  11.  
  12. icon();
  13.  
  14. //保证窗体显示在上方。
  15. wsl = WindowState;
  16. }
  17.  
  18. private void icon()
  19. {
  20. string path = System.IO.Path.GetFullPath(@"Icon/013.ico");
  21. if (File.Exists(path))
  22. {
  23. this.notifyIcon = new NotifyIcon();
  24. this.notifyIcon.BalloonTipText = "Hello, 文件监视器"; //设置程序启动时显示的文本
  25. this.notifyIcon.Text = "文件监视器";//最小化到托盘时,鼠标点击时显示的文本
  26. System.Drawing.Icon icon = new System.Drawing.Icon(path);//程序图标
  27. this.notifyIcon.Icon = icon;
  28. this.notifyIcon.Visible = true;
  29. notifyIcon.MouseDoubleClick += OnNotifyIconDoubleClick;
  30. );
  31. }
  32.  
  33. }
  34.  
  35. private void OnNotifyIconDoubleClick(object sender, EventArgs e)
  36. {
  37. this.Show();
  38. WindowState = wsl;
  39. }
  40.  
  41. private void Window_StateChanged_1(object sender, EventArgs e)
  42. {
  43. ws = this.WindowState;
  44. if (ws == WindowState.Minimized)
  45. {
  46. this.Hide();
  47. }
  48. }

7. 如果您要设置窗体的图标,最好不要设置为 Icon/013.ico 要不然会出错,我猜想这里应该是 Icon/013.ico 这个图标已经被 NotifyIcon 使用或者什么原因。

 8.效果
二 加入右键菜单 
1. 在 WinForm实现窗体最小化后小图标在右边任务栏下  中我是用 ContextMenuStrip 控件来加了,但 WPF 没有这个控件,和上面同样的办法

  1. #region 托盘右键菜单
  2. private void contextMenu()
  3. {
  4. ContextMenuStrip cms = new ContextMenuStrip();
  5.  
  6. //关联 NotifyIcon 和 ContextMenuStrip
  7. notifyIcon.ContextMenuStrip = cms;
  8.  
  9. System.Windows.Forms.ToolStripMenuItem exitMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  10. exitMenuItem.Text = "退出";
  11. exitMenuItem.Click += new EventHandler(exitMenuItem_Click);
  12.  
  13. System.Windows.Forms.ToolStripMenuItem hideMenumItem = new System.Windows.Forms.ToolStripMenuItem();
  14. hideMenumItem.Text = "隐藏";
  15. hideMenumItem.Click += new EventHandler(hideMenumItem_Click);
  16.  
  17. System.Windows.Forms.ToolStripMenuItem showMenuItem = new System.Windows.Forms.ToolStripMenuItem();
  18. showMenuItem.Text = "显示";
  19. showMenuItem.Click += new EventHandler(showMenuItem_Click);
  20.  
  21. cms.Items.Add(exitMenuItem);
  22. cms.Items.Add(hideMenumItem);
  23. cms.Items.Add(showMenuItem);
  24. }
  25.  
  26. private void exitMenuItem_Click(object sender, EventArgs e)
  27. {
  28. notifyIcon.Visible = false;
  29.  
  30. System.Windows.Application.Current.Shutdown();
  31. }
  32.  
  33. private void hideMenumItem_Click(object sender, EventArgs e)
  34. {
  35. this.Hide();
  36. }
  37.  
  38. private void showMenuItem_Click(object sender, EventArgs e)
  39. {
  40. this.Show();
  41. this.Activate();
  42. }
  43. #endregion

2. 主菜单中加入这句话就可以

  1. public MainWindow()
  2. {
  3. InitializeComponent();
  4.  
  5. //NotifyIcon
  6. icon();
  7.  
  8. //ContextMenuStrip
  9. contextMenu();
  10.  
  11. //保证窗体显示在上方。
  12. wsl = WindowState;
  13.  
  14. }

3.效果

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台