這裏給出WPF下,使用任務欄托盤圖標的一種方法。不需要增加第三方的DLL引用,只需要增加框架本身自帶的一些引用。
代碼如下:
private NotifyIcon notifyIcon = null;
WindowState ws;//判斷窗口是否最小化的時候用
WindowState wsl;//記錄窗口隱藏前的狀態
//放在構造函數中,執行此方法
public void SystemIcon()
{
SetNotifyIcon();
contextMenu();
}
/// <summary>
/// 創建系統托盤圖標
/// </summary>
public void SetNotifyIcon()
{
this.notifyIcon = new NotifyIcon();
this.notifyIcon.Text = "文件監視器";//最小化到托盤時,鼠標在圖標上顯示的文本
System.Drawing.Icon icon1 = new System.Drawing.Icon(System.Windows.Application.GetResourceStream(new Uri("/Photo/WPF.ico", UriKind.Relative)).Stream);//程序圖標,這裏需要改成你程序中圖標的路徑,注意圖片的格式。
this.notifyIcon.Icon = icon1;//指定圖標
this.notifyIcon.Visible = false;//初始時不可見
notifyIcon.MouseDoubleClick += (OnNotifyIconDoubleClick);//雙擊事件
//記錄窗口的狀態
wsl = WindowState;
}
/// <summary>
/// 圖標雙擊事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnNotifyIconDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.Show();//顯示窗口
WindowState = wsl;//還原窗口狀態
}
#region 托盤右鍵菜單
/// <summary>
/// 托盤圖標菜單及事件
/// </summary>
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);
}
/// <summary>
/// 退出事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void exitMenuItem_Click(object sender, EventArgs e)
{
notifyIcon.Visible = false;
//延遲退出
Thread.Sleep(1000 * 2);
//釋放托盤圖標資源,在點擊程序右上角退出時,同樣需要調用這個方法。
this.notifyIcon.Dispose();
//終止線程
System.Windows.Application.Current.Shutdown();
}
/// <summary>
/// 隱藏事件,將主窗口隱藏,記住窗口狀態
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void hideMenumItem_Click(object sender, EventArgs e)
{
this.Hide();
WindowState = wsl;//還原窗口狀態
}
/// <summary>
/// 主界面顯示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void showMenuItem_Click(object sender, EventArgs e)
{
this.Show();
}
#endregion
/// <summary>
/// StateChanged事件,在窗口大小改變時,檢測是否是最小化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Window_StateChanged(object sender, EventArgs e)
{
ws = this.WindowState;
if (ws == WindowState.Minimized)
{
this.Hide();
this.notifyIcon.Visible = true;
//彈氣泡/通知框提示WIN7系統中有效
this.notifyIcon.ShowBalloonTip(20, "氣泡彈窗標題", "氣泡彈窗內容", ToolTipIcon.Info);
//notifyIcon.BalloonTipTitle = "程序系統托盤圖標";//設置氣泡彈窗標題
//notifyIcon.BalloonTipText = "Hello, 文件監視器"; //設置氣泡彈窗內容
//notifyIcon.ShowBalloonTip(1000);//消失之前的顯示時間
}
}