WPF編程,通過在主界面中設置系統托盤圖標的一種方法。

這裏給出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);//消失之前的顯示時間
            }

        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章