1. 程式人生 > >WPF實現窗體最小化後小圖示在右邊工作列下

WPF實現窗體最小化後小圖示在右邊工作列下

一 基本功能

1. 這裡是用 NotifyIcon 控制元件來實現,但 WPF 下沒有 NotifyIcon  控制元件,怎麼辦,用 WinForm 下的唄。

先引用  .NET 自帶的兩個程式集 
System.Windows.Forms 是用來使用 NotifyIcon 控制元件的;
System.Drawing 是用來引用圖示檔案的

2. 圖示

3. 設定圖示屬性

4.這裡很重要,因為程式執行後,會在執行程式目錄下去找圖示檔案,這樣設定後就會在應用程式目錄下生成對應的檔案,如果不設定,到時候出錯就找不到原因,反正這裡我是搞了幾個小時才發現這裡要這樣設定的。

5. 設定窗體的 StateChanged="Window_StateChanged_1" 事件

6.程式碼

  1. usingSystem.Windows.Forms;
  2. usingSystem.IO;
  3. WindowState ws;
  4. WindowState wsl;
  5. NotifyIcon notifyIcon;
  6. publicMainWindow()
  7. {
  8. InitializeComponent();
  9. icon();
  10. //保證窗體顯示在上方。
  11. wsl =WindowState;
  12. }
  13. privatevoid icon()
  14. {
  15. string path =System.IO.Path.GetFullPath(@"Icon\013.ico");
  16. if(File.Exists(path
    ))
  17. {
  18. this.notifyIcon =newNotifyIcon();
  19. this.notifyIcon.BalloonTipText="Hello, 檔案監視器";//設定程式啟動時顯示的文字
  20. this.notifyIcon.Text="檔案監視器";//最小化到托盤時,滑鼠點選時顯示的文字
  21. System.Drawing.Icon icon =newSystem.Drawing.Icon(path);//程式圖示
  22. this.notifyIcon.Icon= icon;
  23. this.notifyIcon.Visible=true;
  24. notifyIcon.MouseDoubleClick+=
    OnNotifyIconDoubleClick;
  25. );
  26. }
  27. }
  28. privatevoidOnNotifyIconDoubleClick(object sender,EventArgs e)
  29. {
  30. this.Show();
  31. WindowState= wsl;
  32. }
  33. privatevoidWindow_StateChanged_1(object sender,EventArgs e)
  34. {
  35. ws =this.WindowState;
  36. if(ws ==WindowState.Minimized)
  37. {
  38. this.Hide();
  39. }
  40. }

7. 如果您要設定窗體的圖示,最好不要設定為 Icon\013.ico 要不然會出錯,我猜想這裡應該是 Icon\013.ico 這個圖示已經被 NotifyIcon 使用或者什麼原因。

8.效果 二 加入右鍵選單 
1. 在 WinForm實現窗體最小化後小圖示在右邊工作列下  中我是用 ContextMenuStrip 控制元件來加了,但 WPF 沒有這個控制元件,和上面同樣的辦法
  1. #region 托盤右鍵選單
  2. privatevoid contextMenu()
  3. {
  4. ContextMenuStrip cms =newContextMenuStrip();
  5. //關聯 NotifyIcon 和 ContextMenuStrip
  6. notifyIcon.ContextMenuStrip= cms;
  7. System.Windows.Forms.ToolStripMenuItem exitMenuItem =newSystem.Windows.Forms.ToolStripMenuItem();
  8. exitMenuItem.Text="退出";
  9. exitMenuItem.Click+=newEventHandler(exitMenuItem_Click);
  10. System.Windows.Forms.ToolStripMenuItem hideMenumItem =newSystem.Windows.Forms.ToolStripMenuItem();
  11. hideMenumItem.Text="隱藏";
  12. hideMenumItem.Click+=newEventHandler(hideMenumItem_Click);
  13. System.Windows.Forms.ToolStripMenuItem showMenuItem =newSystem.Windows.Forms.ToolStripMenuItem();
  14. showMenuItem.Text="顯示";
  15. showMenuItem.Click+=newEventHandler(showMenuItem_Click);
  16. cms.Items.Add(exitMenuItem);
  17. cms.Items.Add(hideMenumItem);
  18. cms.Items.Add(showMenuItem);
  19. }
  20. privatevoid exitMenuItem_Click(object sender,EventArgs e)
  21. {
  22. notifyIcon.Visible=false;
  23. System.Windows.Application.Current.Shutdown();
  24. }
  25. privatevoid hideMenumItem_Click(object sender,EventArgs e)
  26. {
  27. this.Hide();
  28. }
  29. privatevoid showMenuItem_Click(object sender,EventArgs e)
  30. {
  31. this.Show();
  32. this.Activate();
  33. }
  34. #endregion

2. 主選單中加入這句話就可以

  1. publicMainWindow()
  2. {
  3. InitializeComponent();
  4. //NotifyIcon
  5. icon();
  6. //ContextMenuStrip
  7. contextMenu();
  8. //保證窗體顯示在上方。
  9. wsl =WindowState;
  10. }

3.效果