WPF中隐藏程序窗口让图标显示在通…

按要求要做一个隐藏在后台通知栏的功能,而目前软件开发所用的wpf不含有NotifyIcon这一控件,研究了一下如何调用winform,效果也算是达到了


头文件
using WinForms = System.Windows.Forms;

预定义几个按钮和通知栏图标
         private WinForms.NotifyIcon _notifyIcon;
        private WinForms.ContextMenu _contextMenu;
        private WinForms.MenuItem _openWindow;
        private WinForms.MenuItem _closeApp;
        private System.ComponentModel.IContainer _iContainer;


初始化函数
 public void NotifyInit()//通知栏显示图标的初始化
        {
            _contextMenu = new WinForms.ContextMenu();
            _openWindow = new WinForms.MenuItem() { Text = "Show" };
            _closeApp = new WinForms.MenuItem() { Text = "Exit" };
           
            _iContainer = new System.ComponentModel.Container();

            WinForms.MenuItem[] menuItems = new WinForms.MenuItem[] { _openWindow, _closeApp };

            _contextMenu.MenuItems.AddRange(menuItems);
            _openWindow.Click += new System.EventHandler(openWindow_Click);
            _closeApp.Click += new System.EventHandler(exitApp_Click);

            _notifyIcon = new WinForms.NotifyIcon(_iContainer);
            _notifyIcon.Icon = new System.Drawing.Icon(@"Z:\CUserPicture\logo\bitbug_favicon.ico");
            _notifyIcon.Text = "Todolist";
            _notifyIcon.Visible = true;
            _notifyIcon.ContextMenu = _contextMenu;
        }

通知栏图标相关:

上面的  _notifyIcon.Icon = new System.Drawing.Icon(@"Z:\logo\bitbug_favicon.ico");   这一句中是我自己的图标的绝对路径,图标必须要有才会显示

  _notifyIcon.Text 这个是设置显示在通知栏中的时候,程序的名称



右键按钮相关

    _openWindow.Click += new System.EventHandler(openWindow_Click);
            _closeApp.Click += new System.EventHandler(exitApp_Click);

openWindow_Click, exitApp_Click 这两个事件是已经定义的函数


比如我一开始是隐藏dialog的,那么这里的openWindw就是

 private void  openWindow_Click(object sender,EventArgs e)
        {
            this.Show();
        }
这样在点击Show时候就会显示程序窗口
 

退出程序这里比较直截了当
private void exitApp_Click(object sender,EventArgs e)
        {
            Environment.Exit(0);
        }


防止点击X导致程序关闭,需要重载关闭按钮

protected override void OnClosing(CancelEventArgs e)
        {
            Hide();
            e.Cancel = true;
        }
 

最后效果:

WPF中隐藏程序窗口让图标显示在通知栏


 

 

 

关于其他:

 

这位开发的库也可以一用,但我在折腾了一会觉得一些地方似乎是对不上的,虽然近期还在做库更新但是教程没有更新,要更好地使用还需要折腾一下

http://www.hardcodet.net/wpf-notifyicon

你可能感兴趣的:(软件相关)