WPF實現窗體最小化後小圖示在右邊工作列下
阿新 • • 發佈:2019-01-07
一 基本功能
1. 這裡是用 NotifyIcon 控制元件來實現,但 WPF 下沒有 NotifyIcon 控制元件,怎麼辦,用 WinForm 下的唄。
先引用 .NET 自帶的兩個程式集
System.Windows.Forms 是用來使用 NotifyIcon 控制元件的;
System.Drawing 是用來引用圖示檔案的
2. 圖示
3. 設定圖示屬性
4.這裡很重要,因為程式執行後,會在執行程式目錄下去找圖示檔案,這樣設定後就會在應用程式目錄下生成對應的檔案,如果不設定,到時候出錯就找不到原因,反正這裡我是搞了幾個小時才發現這裡要這樣設定的。
5. 設定窗體的 StateChanged="Window_StateChanged_1" 事件
6.程式碼
- usingSystem.Windows.Forms;
- usingSystem.IO;
- WindowState ws;
- WindowState wsl;
- NotifyIcon notifyIcon;
- publicMainWindow()
- {
- InitializeComponent();
- icon();
- //保證窗體顯示在上方。
- wsl =WindowState;
- }
- privatevoid icon()
- {
- string path =System.IO.Path.GetFullPath(@"Icon\013.ico");
- if(File.Exists(path
- {
- this.notifyIcon =newNotifyIcon();
- this.notifyIcon.BalloonTipText="Hello, 檔案監視器";//設定程式啟動時顯示的文字
- this.notifyIcon.Text="檔案監視器";//最小化到托盤時,滑鼠點選時顯示的文字
- System.Drawing.Icon icon =newSystem.Drawing.Icon(path);//程式圖示
- this.notifyIcon.Icon= icon;
- this.notifyIcon.Visible=true;
- notifyIcon.MouseDoubleClick+=
- );
- }
- }
- privatevoidOnNotifyIconDoubleClick(object sender,EventArgs e)
- {
- this.Show();
- WindowState= wsl;
- }
- privatevoidWindow_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 托盤右鍵選單
- privatevoid contextMenu()
- {
- ContextMenuStrip cms =newContextMenuStrip();
- //關聯 NotifyIcon 和 ContextMenuStrip
- notifyIcon.ContextMenuStrip= cms;
- System.Windows.Forms.ToolStripMenuItem exitMenuItem =newSystem.Windows.Forms.ToolStripMenuItem();
- exitMenuItem.Text="退出";
- exitMenuItem.Click+=newEventHandler(exitMenuItem_Click);
- System.Windows.Forms.ToolStripMenuItem hideMenumItem =newSystem.Windows.Forms.ToolStripMenuItem();
- hideMenumItem.Text="隱藏";
- hideMenumItem.Click+=newEventHandler(hideMenumItem_Click);
- System.Windows.Forms.ToolStripMenuItem showMenuItem =newSystem.Windows.Forms.ToolStripMenuItem();
- showMenuItem.Text="顯示";
- showMenuItem.Click+=newEventHandler(showMenuItem_Click);
- cms.Items.Add(exitMenuItem);
- cms.Items.Add(hideMenumItem);
- cms.Items.Add(showMenuItem);
- }
- privatevoid exitMenuItem_Click(object sender,EventArgs e)
- {
- notifyIcon.Visible=false;
- System.Windows.Application.Current.Shutdown();
- }
- privatevoid hideMenumItem_Click(object sender,EventArgs e)
- {
- this.Hide();
- }
- privatevoid showMenuItem_Click(object sender,EventArgs e)
- {
- this.Show();
- this.Activate();
- }
- #endregion
2. 主選單中加入這句話就可以
- publicMainWindow()
- {
- InitializeComponent();
- //NotifyIcon
- icon();
- //ContextMenuStrip
- contextMenu();
- //保證窗體顯示在上方。
- wsl =WindowState;
- }
3.效果