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);//消失之前的显示时间
            }

        }

猜你喜欢

转载自blog.csdn.net/qq_43307934/article/details/88025401