wpf工程中加入Hardcodet.NotifyIcon.Wpf生成托盘
1、在项目中用nuget引入Hardcodet.NotifyIcon.Wpf。如下图所示。
2、在App.xaml中创建托盘界面,代码是写在 App.xaml 里面
注意在application中一定要加入这一行代码: xmlns:tb="http://www.hardcodet.net/taskbar"
然后在<Application.Resources>中加入如下代码
<Application.Resources><ContextMenu x:Shared="false" x:Key="SysTrayMenu"><MenuItem Height="25" Header="显示界面" Command="{Binding NotifyCommand}" CommandParameter="1"></MenuItem><MenuItem Height="25" Header="隐藏界面" Command="{Binding NotifyCommand}" CommandParameter="0"></MenuItem><Separator /><MenuItem Height="25" Header="退出服务" Command="{Binding NotifyCommand}" CommandParameter="99"></MenuItem></ContextMenu><tb:TaskbarIcon x:Key="Taskbar" ToolTipText=""DoubleClickCommand="{Binding NotifyCommand}" DoubleClickCommandParameter="1"ContextMenu="{StaticResource SysTrayMenu}" IconSource="/jqsw.ico"><tb:TaskbarIcon.TrayToolTip><Border Background="LightYellow" CornerRadius="5" Opacity="0.8" Padding="10"><StackPanel Orientation="Vertical"><TextBlock Text="温湿度数据采集服务网口版" Foreground="Red"/><!--<TextBlock Text="{Binding SystemTime}" Foreground="Red"/>--></StackPanel></Border></tb:TaskbarIcon.TrayToolTip></tb:TaskbarIcon></Application.Resources>
3、创建ViewModelBase类。再创建TaskbarIconViewModel类继承ViewModelBase类
internal class ViewModelBase : INotifyPropertyChanged{public event PropertyChangedEventHandler PropertyChanged ;protected void RaisePropertyChanged(string property){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));}}internal class TaskbarIconViewModel : ViewModelBase{private string systemTime;public string SystemTime{get { return systemTime; }set { systemTime = value; RaisePropertyChanged("SystemTime"); }}public DelegateCommand NotifyCommand{get{return new DelegateCommand((type) =>{if (type.ToString() == "0")Application.Current.MainWindow.Hide();if (type.ToString() == "1"){Application.Current.MainWindow.Show();Application.Current.MainWindow.Activate();}if (type.ToString() == "99")Application.Current.Shutdown();});}}}
、在App.xaml.cs中写入如下代码:
private static System.Threading.Mutex mutex;protected override void OnStartup(StartupEventArgs e){mutex = new System.Threading.Mutex(true, "TemCollSrvTwo");if (mutex.WaitOne(0, false)){base.OnStartup(e);}else{MessageBox.Show("程序已经在运行!", "提示");this.Shutdown();} mTaskbarIcon = (TaskbarIcon)FindResource("Taskbar");mTaskbarIcon.DataContext = new TaskbarIconViewModel();}public static TaskbarIcon mTaskbarIcon;4031
5、效果展示

相关文章:
wpf工程中加入Hardcodet.NotifyIcon.Wpf生成托盘
1、在项目中用nuget引入Hardcodet.NotifyIcon.Wpf。如下图所示。 2、在App.xaml中创建托盘界面,代码是写在 App.xaml 里面 注意在application中一定要加入这一行代码: xmlns:tb"http://www.hardcodet.net/taskbar" 然后在<Application.R…...
keil下载及安装(社区版本)
知不足而奋进 望远山而前行 目录 文章目录 前言 Keil有官方版本和社区版本,此文章为社区版本安装,仅供参考。 1.keil MDK 2.keil社区版介绍 3.keil下载 (1)打开进入登录界面 (2)点击下载,跳转到信息页面 (3)填写个人信息,点击提交 (4)点击下载…...
python书上的动物是啥
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC语言的一种继承。之所以选中Python作为程序的名字,是因为他是一个叫Monty Python…...
数据库管理-第198期 升级Oracle ACE Pro,新赛季继续努力(20240605)
数据库管理198期 2024-06-05 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605)1 惊喜2 变化3 Oracle ACE总结 数据库管理-第198期 升级ACE Pro,新赛季继续努力(20240605) 作者:胖头鱼的…...
华为坤灵交换机S300, S500, S210,S220, S200, S310 如何WEB抓包
通过S系列交换机配置端口镜像实现抓包 1、应用场景 端口镜像是指将经过指定端口(源端口或者镜像端口)的报文复制一份到另一个指定端口(目的端口或者观察端口)。 在网络运营与维护的过程中,为了便于业务监测和故障定位,网络管理员时常要获取设备上的业务…...
【亚马逊云科技 CSDN 联合巨献】 「对话AI 构建者:从基础到应用的 LLM 全景培训」 限时免费!
🚀🌟【亚马逊云科技 & CSDN 联合巨献】 📚「对话AI 构建者:从基础到应用的 LLM 全景培训」🔥 限时免费! 📆 抓紧时间!6月7日前注册,原价 399,现在仅需 0…...
【AI大模型】Function Calling
目录 什么是Function Calling 示例 1:调用本地函数 Function Calling 的注意事项 支持 Function Calling 的国产大模型 百度文心大模型 MiniMax ChatGLM3-6B 讯飞星火 3.0 通义千问 几条经验总结 什么是Function Calling Function Calling 是一种函数调用机…...
零钱兑换 - LeetCode 热题 85
大家好!我是曾续缘🤪 今天是《LeetCode 热题 100》系列 发车第 85 天 动态规划第 5 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 零钱兑换 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount &…...
基于web的垃圾分类回收系统的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,公告管理,运输管理,基础数据管理 用户账户功能包括:系统首页,个人中心,运输管理,公告…...
优化你的WordPress网站:内链建设与Link Whisper Pro插件的利用
文章目录 内链的重要性WordPress SEO插件:Link Whisper Pro主要功能使用指南下载与安装 结语 在数字营销和网站管理领域,SEO内部优化是提升网站排名、增加流量和提高用户参与度的核心策略。在众多SEO技巧中,内链建设是构建良好网站结构和提升…...
spring中那些地方使用了反射
1、依赖注入(Dependency Injection) Spring Boot通过反射机制将bean注入到相应的属性或构造函数中。当我们在Spring Boot中使用如Autowired这样的注解时,Spring容器会利用反射机制找到相应的bean并注入到对应的属性或构造函数中。 2、Bean的…...
1 机器人软件开发学习所需通用技术栈(一)
机器人软件工程师技术路线(如有缺失,欢迎补充) 1. 机器人软件开发工程师技术路线 1.1 基础知识 C/C编程:掌握C/C语言基础,包括数据结构、算法、内存管理等。操作系统:了解Linux或Windows等操作系统的基本…...
Java(十二)——Comparable接口与Comparator接口
文章目录 Comparable与Comparator接口Comparable接口Comparator接口 Comparable与Comparator接口 我们可能会遇到这样的问题:怎么对一个对象数组进行排序? 比如对一个狗类对象数组进行排序,而想到这,我们又会有一个问题ÿ…...
Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:轨道交通监控系统
株洲中车时代电气股份有限公司(下称中车时代电气)是中国中车旗下股份制企业,其前身及母公司——中车株洲电力机车研究所有限公司创立于1959年。中车时代电气扎根株洲,走好两条钢轨,走出两条钢轨。中车时代电气秉承“双…...
笔记 | 软件工程01:从程序到软件
1 软件工程知识域 2 程序 2.1 何为程序及程序的质量要求 何为程序: 理解:软件工程可能就是在弥补OOP语言与自然语言之间还存在的鸿沟 2.1.1 程序质量的内在和外在体现 2.1.2 程序质量的语法和语义体现 2.2 编写代码的基本原则 2.3 程序质量保证方法 …...
废品回收小程序开发,助力商家拓展回收市场
随着互联网的快速发展,废品回收行业也走向了数字化发展,废品回收小程序成为了拓展市场的重要方式。在当下万亿元下的回收市场中,废品回收小程序的发展也能够发挥重要作用,提高市场回收效率,提高大众的回收意识…...
JVM类加载机制和双亲委派
类加载机制 java文件需要编译成字节码文件(.class文件),jvm是通过类加载机制,将.class文件加载进内存,经过验证连接->初始化直到使用该对象的过程就是类加载机制,当new对象的时候,jvm首先去常量池寻找该类的符号引用…...
【PyCharm】无法创建虚拟环境,提示:has no attribute CPython3macOsBrew
报错信息: AttributeError: module virtualenv.create.via_global_ref.builtin.cpython.mac_os has no attribute CPython3macOsBrew报错原因: 可能含有多个virtualenv,发生冲突了。 解决方法: 终端执行以下命令: p…...
华为OD刷题C卷 - 每日刷题 12(数组连续和,求最多可以派出多少支团队)
1、(数组连续和): 这段代码是解决“数组连续和”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,用于计算给定数组中有多少个连续区间的和大于等于给定值x。 main方法首先读取数组的长度n和阈值x&…...
2.1 初识Windows程序
Windows程序设计是一种面向对象的编程。Windows操作系统以数据结构的形式定义了大量预定义的对象作为操作系统的数据类型。Windows动态链接库提供了各种各样的API接口函数供Windows应用程序调用。一个Windows应用程序是运行在Windows操作系统之上的。这些API接口函数的调用所实…...
数据治理与数据质量:从策略到实践
数据治理与数据质量:从策略到实践 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知数据治理和数据质量在企业数据管理中的重要性。随着数据量的爆炸式增长和数据类型的多样化,数据治理和数据质量已经成为企业数据管理的核心挑战。今…...
“16QAM调制与解调系统的SystemView仿真及分析”
通信原理 systemview 16QAM调制与解调系统的仿真 16QAM调制解调系统与解调系统的仿真 用SystemView建立一个16QAM调制解调器电路,分析理解系统的各个模块功能,观察波形图 判断是不是实现了16QAM调制解调系统功能 基本要求: (1)在SystemView软 件中构建短波16QAM仿真…...
深入理解Python @dataclass:从基础到高级用法
Python 3.7引入了dataclass装饰器,这是一个强大的工具,能够显著减少数据类的样板代码。本文将详细介绍dataclass的各种用法,特别是如何正确处理可变默认值和类型注解。 什么是dataclass dataclass是位于dataclasses模块中的装饰器,…...
Switch手柄电脑连接全攻略:BetterJoy开源工具使用指南
Switch手柄电脑连接全攻略:BetterJoy开源工具使用指南 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/…...
避开带宽陷阱:用低成本示波器搞定MIPI CSI-2信号的眼图与时序分析
避开带宽陷阱:用低成本示波器搞定MIPI CSI-2信号的眼图与时序分析 当你手头只有一台几百MHz带宽的示波器,却要分析动辄上Gbps的MIPI CSI-2高速信号时,是否感到无从下手?别担心,这篇文章将带你突破硬件限制,…...
Node.js——dns模块
dns模块1、resolve方法将域名解析为DNS记录2、lookup方法查询IP地址3、reverse方法反向解析IP地址4、dns模块中的各种错误代码在网络编程中,开发者更倾向于使用域名,而不是IP地址来指定网络连接的目标地址。在Node.js中,提供dns模块ÿ…...
python zipfile
# Python 的 zipfile:不只是打包文件那么简单 如果你用过压缩软件,大概知道 ZIP 格式是用来把多个文件打包成一个,顺便还能压缩节省空间。Python 里的 zipfile 模块就是干这个的,但它的能力远不止“打包”这么简单。 它到底是什么…...
掌握3D动作捕捉:开源工具OpenMMD轻松实现真人动作转换
掌握3D动作捕捉:开源工具OpenMMD轻松实现真人动作转换 【免费下载链接】OpenMMD OpenMMD is an OpenPose-based application that can convert real-person videos to the motion files (.vmd) which directly implement the 3D model (e.g. Miku, Anmicius) animat…...
零基础入门:星图平台私有化部署Qwen3-VL:30B,Clawdbot飞书接入完整指南
零基础入门:星图平台私有化部署Qwen3-VL:30B,Clawdbot飞书接入完整指南 1. 项目概述与准备工作 1.1 为什么选择Qwen3-VL:30B? Qwen3-VL:30B是目前最强的多模态大模型之一,具备以下核心优势: 强大的视觉理解能力&am…...
快速验证openclaw安装:用快马一键生成环境配置与测试脚本
最近在尝试用openclaw这个开源机器人抓取工具时,发现环境配置和基础功能验证的过程挺费时间的。作为一个经常需要快速验证工具可行性的开发者,我摸索出了一个更高效的方法——用InsCode(快马)平台来一键生成配置脚本和测试原型。下面分享下具体实践过程&…...
