• WPF实现窗体最小化后小图标在右边任务栏下


    一 基本功能

    1. 这里是用 NotifyIcon 控件来实现,但 WPF 下没有 NotifyIcon  控件,怎么办,用 WinForm 下的呗。

    先引用  .NET 自带的两个程序集
    System.Windows.Forms 是用来使用 NotifyIcon 控件的;
    System.Drawing 是用来引用图标文件的

    2. 图标

    3. 设置图标属性

    4.这里很重要,因为程序运行后,会在运行程序目录下去找图标文件,这样设置后就会在应用程序目录下生成对应的文件,如果不设置,到时候出错就找不到原因,反正这里我是搞了几个小时才发现这里要这样设置的。

    5. 设置窗体的 StateChanged="Window_StateChanged_1" 事件

    6.代码

            using System.Windows.Forms;
            using System.IO;
    
            WindowState ws;
            WindowState wsl;
            NotifyIcon notifyIcon; 
     
    
            public MainWindow()
            {
                InitializeComponent();
     
    
                icon();
    
    
                //保证窗体显示在上方。 
                wsl = WindowState;
            }
    
    
            private void icon()
            {
                string path = System.IO.Path.GetFullPath(@"Icon13.ico");
                if (File.Exists(path))
                {
                    this.notifyIcon = new NotifyIcon();
                    this.notifyIcon.BalloonTipText = "Hello, 文件监视器"; //设置程序启动时显示的文本
                    this.notifyIcon.Text = "文件监视器";//最小化到托盘时,鼠标点击时显示的文本
                    System.Drawing.Icon icon = new System.Drawing.Icon(path);//程序图标 
                    this.notifyIcon.Icon = icon;
                    this.notifyIcon.Visible = true;
                    notifyIcon.MouseDoubleClick += OnNotifyIconDoubleClick;
                    this.notifyIcon.ShowBalloonTip(1000);
                }
               
            }
    
            private void OnNotifyIconDoubleClick(object sender, EventArgs e)
            {
                this.Show();
                WindowState = wsl;
            }
    
     
    
            private void Window_StateChanged_1(object sender, EventArgs e)
            {
                ws = this.WindowState;
                if (ws == WindowState.Minimized)
                {
                    this.Hide();
                }
            } 
    View Code

    7. 如果您要设置窗体的图标,最好不要设置为 Icon13.ico 要不然会出错,我猜想这里应该是 Icon13.ico 这个图标已经被 NotifyIcon 使用或者什么原因。

     
    8.效果

    二 加入右键菜单
    1. 在 WinForm实现窗体最小化后小图标在右边任务栏下  中我是用 ContextMenuStrip 控件来加了,但 WPF 没有这个控件,和上面同样的办法 
    #region 托盘右键菜单
            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);
            } 
    
            private void exitMenuItem_Click(object sender, EventArgs e)
            {
                notifyIcon.Visible = false;
    
                System.Windows.Application.Current.Shutdown();
            }
    
            private void hideMenumItem_Click(object sender, EventArgs e)
            {
                this.Hide();
            }
    
            private void showMenuItem_Click(object sender, EventArgs e)
            {
                this.Show();
                this.Activate();
            } 
            #endregion 
    View Code

    2. 主菜单中加入这句话就可以

            public MainWindow()
            {
                InitializeComponent();
    
                //NotifyIcon
                icon();
     
    
                //ContextMenuStrip
                contextMenu();
     
    
                //保证窗体显示在上方。 
                wsl = WindowState;
    
           }
    View Code

    3.效果

     
  • 相关阅读:
    qt creator源码全方面分析(2-10-4)
    qt creator源码全方面分析(2-10-3)
    qt creator源码全方面分析(2-10-2)
    qt creator源码全方面分析(2-10-1)
    qt creator源码全方面分析(2-9)
    flex布局使用
    filter,map,reduce三个数组高阶函数的使用
    git的使用总结
    axios学习和使用
    vuex的学习
  • 原文地址:https://www.cnblogs.com/Luoma_HaoWei/p/3236632.html
Copyright © 2020-2023  润新知