(WPF)通知栏图标和右键菜单

来源:互联网 发布:wind万得资讯的数据库 编辑:程序博客网 时间:2024/06/06 13:59

WPF没有自带的通知栏图标组件,需要引用Windows类库,具体代码如下:

        public MainWindow()        {            InitializeComponent();            icon();            wsl = WindowState.Minimized;        }#region 通知栏            WindowState wsl;            System.Windows.Forms.NotifyIcon notifyIcon = null;                    private void icon()            {                this.notifyIcon = new System.Windows.Forms.NotifyIcon();                this.notifyIcon.BalloonTipText = "ECMS 服务正在运行..."; //设置程序启动时显示的文本                this.notifyIcon.Text = "ECMS 服务";//最小化到托盘时,鼠标点击时显示的文本                this.notifyIcon.Icon = new System.Drawing.Icon("./logo_48X48.ico");//程序图标                this.notifyIcon.Visible = true;                //右键菜单--打开菜单项                System.Windows.Forms.MenuItem open = new System.Windows.Forms.MenuItem("Open");                open.Click += new EventHandler(ShowWindow);                //右键菜单--退出菜单项                System.Windows.Forms.MenuItem exit = new System.Windows.Forms.MenuItem("Exit");                exit.Click += new EventHandler(CloseWindow);                //关联托盘控件                System.Windows.Forms.MenuItem[] childen = new System.Windows.Forms.MenuItem[] { open, exit };                notifyIcon.ContextMenu = new System.Windows.Forms.ContextMenu(childen);                notifyIcon.MouseDoubleClick += OnNotifyIconDoubleClick;                this.notifyIcon.ShowBalloonTip(1000);            }            private void OnNotifyIconDoubleClick(object sender, EventArgs e)            {                /*                 * 这一段代码需要解释一下:                 * 窗口正常时双击图标执行这段代码是这样一个过程:                 * this.Show()-->WindowState由Normail变为Minimized-->Window_StateChanged事件执行(this.Hide())-->WindowState由Minimized变为Normal-->窗口隐藏                 * 窗口隐藏时双击图标执行这段代码是这样一个过程:                 * this.Show()-->WindowState由Normail变为Minimized-->WindowState由Minimized变为Normal-->窗口显示                 */                this.Show();                this.WindowState = WindowState.Minimized;                this.WindowState = WindowState.Normal;            }            private void Window_StateChanged(object sender, EventArgs e)            {                //窗口最小化时隐藏任务栏图标                 if (WindowState == WindowState.Minimized)                {                    this.Hide();                }            }            private void ShowWindow(object sender, EventArgs e)            {                this.Visibility = System.Windows.Visibility.Visible;                this.ShowInTaskbar = true;                this.Activate();            }            private void HideWindow(object sender, EventArgs e)            {                this.ShowInTaskbar = false;                this.Visibility = System.Windows.Visibility.Hidden;            }            private void CloseWindow(object sender, EventArgs e)            {                System.Windows.Application.Current.Shutdown();            }        #endregion


1 0