WPF控件--NotifyIcon

 

运行界面如下所示:

          

图1                                             图2

代码很少,如下所示:

 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->
 using System;
 using System.Windows;
 using System.Windows.Forms;
 using System.Drawing;

 namespace Royen
 {
     public partial class SysTray : Window
     {
         private NotifyIcon notifyIcon=null;

         public SysTray()
         {
             InitializeComponent();

             InitialTray();
         }

         private void InitialTray()
         {
             //隐藏主窗体
             this.Visibility = Visibility.Hidden;

             //设置托盘的各个属性
             notifyIcon = new NotifyIcon();
             notifyIcon.BalloonTipText = "systray runnning...";
             notifyIcon.Text = "systray";
             notifyIcon.Icon = new System.Drawing.Icon("http://www.cnblogs.com/res/spring.ico");
             notifyIcon.Visible = true;
             notifyIcon.ShowBalloonTip();
             notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);

             //设置菜单项
             MenuItem setting1 = new MenuItem("setting1");
             MenuItem setting2 = new MenuItem("setting2");
             MenuItem setting = new MenuItem("setting", new MenuItem[]{setting1,setting2});

             //帮助选项
             MenuItem help = new MenuItem("help");

             //关于选项
             MenuItem about = new MenuItem("about");

             //退出菜单项
             MenuItem exit = new MenuItem("exit");
             exit.Click += new EventHandler(exit_Click);

             //关联托盘控件
             MenuItem[] childen = new MenuItem[] {setting,help,about,exit};
             notifyIcon.ContextMenu = new ContextMenu(childen);

             //窗体状态改变时候触发
             this.StateChanged += new EventHandler(SysTray_StateChanged);
         }

         /// <summary>
         /// 鼠标单击
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
         {
             //如果鼠标左键单击
             if (e.Button == MouseButtons.Left)
             {
                 if (this.Visibility == Visibility.Visible)
                 {
                     this.Visibility = Visibility.Hidden;
                 }
                 else
                 {
                     this.Visibility = Visibility.Visible;
                     this.Activate();
                 }
             }
         }

         /// <summary>
         /// 窗体状态改变时候触发
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void SysTray_StateChanged(object sender, EventArgs e)
         {
             if (this.WindowState == WindowState.Minimized)
             {
                 this.Visibility = Visibility.Hidden;
             }
         }          

         /// <summary>
         /// 退出选项
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void exit_Click(object sender, EventArgs e)
         {
             if (System.Windows.MessageBox.Show("sure to exit?",
                                                "application",
                                                 MessageBoxButton.YesNo,
                                                 MessageBoxImage.Question,
                                                 MessageBoxResult.No) == MessageBoxResult.Yes)
             {
                 System.Windows.Application.Current.Shutdown();
             }
         }
     }
 }

工程源码下载:/Files/royenhome/Royen.rar 。真诚的希望和大家学习交流~

支持正版,版权来自 http://www.cnblogs.com/royenhome/archive/2010/02/02/1662243.html  园主:royen

WPF控件--利用Winform库中的NotifyIcon实现托盘小程序的更多相关文章

  1. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  2. 在Winform窗体中使用WPF控件(附源码)

    原文:在Winform窗体中使用WPF控件(附源码) 今天是礼拜6,下雨,没有外出,闲暇就写一篇博文讲下如何在Winform中使用WPF控件.原有是我在百度上搜索相关信息无果,遂干脆动手自己实现. W ...

  3. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  4. 在WinForm应用程序中嵌入WPF控件

    我们知道,在WPF界面上添加WinForm的控件需要使用WindowsFormHost类.而在WinForm界面上添加WPF控件该如何做呢?有没有类似的类呢?明显是有的,ElementHost就是为了 ...

  5. WPF 控件库——仿制Chrome的ColorPicker

    WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...

  6. 《Dotnet9》系列-开源C# WPF控件库2《Panuon.UI.Silver》强力推荐

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  7. 《Dotnet9》系列-开源C# WPF控件库1《MaterialDesignInXAML》强力推荐

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

  8. WPF 精修篇 Winform 嵌入WPF控件

    原文:WPF 精修篇 Winform 嵌入WPF控件 首先 创建WPF控件库 这样就有了一个WPF界面 在wpf中增加界面等 在winform中增加WPFDLL 重新生成解决方案 在左侧工具栏 出现W ...

  9. [WPF]是时候将WPF控件库从.Net Framework升级到.NET Core 3.1

    1. 升级到Core的好处 去年中我曾考虑将我的控件库项目Kino.Toolkit.Wpf升级到.NET Core,不过很快放弃了,因为当时.NET Core是预览版,编译WPF还需要使用最新的Vis ...

随机推荐

  1. 边工作边刷题:70天一遍leetcode: day 85-2

    Paint Fence 要点: 这题是求number of ways,如果是相邻不相同颜色,那么就trivial了:k*(k-1)^(n-1).所以这里no more than two adjacen ...

  2. Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】

    题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数 解法:树形DP问题.定义: dp[u][0]表示以u为根的子树对父亲的贡献为0 dp ...

  3. Redis 一二事 - 在spring中使用jedis 连接调试单机redis以及集群redis

    Redis真是好,其中的键值用起来真心强大啊有木有, 之前的文章讲过搭建了redis集群 那么咋们该如何调用单机版的redis以及集群版的redis来使用缓存服务呢? 先讲讲单机版的,单机版redis ...

  4. [反编译U3D]Decompile Unity Resources

    工具说明 反编译unity project资源文件,包括ios,android,pc等平台资源,仅供学习使用! 以下工具任选其一,未有特殊说明是可以同时提取unity3.x,unity4.x,unit ...

  5. java 19 -15 File类批量更改文件名的方法

    /* 需求: * 把H:\三国演义下面的视频名称修改为 00?_介绍.avi 思路: A:封装目录 B:获取该目录下所有的文件的File数组 C:遍历该File数组,得到每一个File对象 D:拼接一 ...

  6. JavaScript基于时间的动画算法

    转自:https://segmentfault.com/a/1190000002416071 前言 前段时间无聊或有聊地做了几个移动端的HTML5游戏.放在不同的移动端平台上进行测试后有了诡异的发现, ...

  7. 【C#】【Thread】ManualResetEvent和AutoResetEvent区别

    ManualResetEvent和AutoResetEvent主要用于线程之间同步问题. 主要使用方法有Set();Reset();WaitOne(); Set():将事件状态设置为终止状态,允许一个 ...

  8. 系统广播 android.intent.action.KILL_BACKGROUND_SERVICE

    Broadcast: Intent { act=android.intent.action.KILL_BACKGROUND_SERVICE.com.xxx.VoiceAssistant flg=0x1 ...

  9. C语言 百炼成钢4

    //题目10:打印楼梯,同时在楼梯上方打印两个笑脸. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdli ...

  10. C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

    反射以及Attribute在ORM中的应用 一. 反射什么是反射?简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等.反射有什么用呢?反射不但让你在运行 ...