[WPF]创建系统栏小图标
隐藏窗体任务栏图标
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
this.ShowInTaskbar = false;
}
}
系统图标类
public class SystemTray
{
public static SystemTray Instance;
/// <summary>
/// 静态构造函数,在类第一次被创建或者静态成员被调用的时候调用
/// </summary>
static SystemTray()
{
Instance=new SystemTray();
}
public NotifyIcon Ni { get; set; }
private SystemTray()
{
Ni = new System.Windows.Forms.NotifyIcon();
Stream iconStream = Application.GetResourceStream(new Uri("pack://application:,,,/StikyNotes;component/MyLogo.ico")).Stream;
Ni.Icon = new System.Drawing.Icon(iconStream);
Ni.Visible = true;
Ni.MouseClick += Ni_MouseClick;
}
private void Ni_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
System.Windows.Controls.ContextMenu NotifyIconMenu = (System.Windows.Controls.ContextMenu)App.Current.FindResource("NotifyIconMenu");
NotifyIconMenu.IsOpen = true;
App.Current.MainWindow?.Activate();
}
if (e.Button == MouseButtons.Left)
{
var wins=WindowsManager.Instance.Windows;
foreach (var i in wins)
{
i.Activate();
}
}
}
/// <summary>
/// 销毁系统托盘图标的资源
/// </summary>
public void DisposeNotifyIcon()
{
Ni?.Dispose();
}
}
在App.xaml中:
public partial class App : Application
{
System.Threading.Mutex mutex;
protected override void OnStartup(StartupEventArgs e)
{
bool ret;
mutex = new System.Threading.Mutex(true, "StikyNotesAPP", out ret);
if (!ret)
{
MessageBox.Show("程序已经运行了");
Environment.Exit(0);
}
base.OnStartup(e);
var systemtray = SystemTray.Instance;
}
protected override void OnDeactivated(EventArgs e)
{
base.OnDeactivated(e);
System.Windows.Controls.ContextMenu menu = this.FindResource("NotifyIconMenu") as ContextMenu;
if (menu.IsOpen == true)
{
menu.IsOpen = false;
}
}
/// <summary>
/// 新建窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuOpen_Click(object sender, RoutedEventArgs e)
{
var MainWindow = new MainWindow();
MainWindow.DataContext = new MainViewModel(MainWindow, new WindowsData());
WindowsManager.Instance.Windows.Add(MainWindow);
MainWindow.Show();
}
/// <summary>
/// 窗体退出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MenuExit_Click(object sender, RoutedEventArgs e)
{
SystemTray.Instance.DisposeNotifyIcon();
App.Current.Shutdown();
}
/// <summary>
/// 窗体退出事件
/// </summary>
/// <param name="e"></param>
protected override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
XMLHelper.SaveObjAsXml(ProgramData.Instance, "StikyNotesData.xml");
SystemTray.Instance.DisposeNotifyIcon();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
var programData = XMLHelper.DecodeXML<ProgramData>("StikyNotesData.xml");
if (programData != null)
{
var windowsDatas = programData.Datas;
ProgramData.Instance.IsWindowTopMost = programData.IsWindowTopMost;
ProgramData.Instance.IsStartUpWithSystem = programData.IsStartUpWithSystem;
MainWindow MainWindow;
//有创建过的窗口
if (windowsDatas.Count > 0)
{
for (int i = 0; i < windowsDatas.Count; i++)
{
MainWindow = new MainWindow();
MainWindow.DataContext = new MainViewModel(MainWindow, windowsDatas[i]);
MainWindow.Show();
}
}
else//以前的窗口都被删掉了
{
MainWindow = new MainWindow();
MainWindow.DataContext = new MainViewModel(MainWindow, new WindowsData());
MainWindow.Show();
}
}
//没有创建过的窗口
else
{
var MainWindow = new MainWindow();
MainWindow.DataContext = new MainViewModel(MainWindow, new WindowsData());
MainWindow.Show();
}
}
}
App.xaml中
<ContextMenu x:Key="NotifyIconMenu" StaysOpen="False">
<MenuItem
Name="MenuOpen"
Click="MenuOpen_Click"
Header="新建" />
<MenuItem
Name="MenuExit"
Click="MenuExit_Click"
Header="退出" />
</ContextMenu>
问题
记得在退出的时候要释放使用的图标资源,否则在程序退出之后,系统栏中还会存在小图标,要使用下面这条语句:
SystemTray.Instance.DisposeNotifyIcon();
效果

[WPF]创建系统栏小图标的更多相关文章
- 【electron系列之一】创建右下角通知栏小图标
electron 用Tray对象来实现右下角通知栏小图标 一.先引入app, BrowserWindow来实现浏览器功能,接着引入Tray, Menu来实现右下角 二. new Tray('./pag ...
- (29)odoo的可用小图标
* 系统的小图标都采用了 fontawesome 官网是 http://fontawesome.dashgame.com/ * 运用小图标 # 首先打开官网 http://fonta ...
- odoo开发笔记--odoo可用小图标
odoo系统的小图标都采用了 fontawesome字体图标 官网: http://fontawesome.dashgame.com/ Github:http://fortawesome.github ...
- WPF实现窗体最小化后小图标在右边任务栏下
一 基本功能 1. 这里是用 NotifyIcon 控件来实现,但 WPF 下没有 NotifyIcon 控件,怎么办,用 WinForm 下的呗. 先引用 .NET 自带的两个程序集 Syste ...
- 利用overflow实现导航栏中常 出现的倒三角下拉小图标
常用网页界面中,导航栏中的倒三角下拉小图标实现,可用overflow: 效果如右图: .Triangle{position:relative;width:280px;height:15px;} ;ov ...
- WPF编程,指定窗口图标、窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法。
原文:WPF编程,指定窗口图标.窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330793 ...
- WPF——TaskBarIconOverlay(任务栏图标叠加)
原文:WPF--TaskBarIconOverlay(任务栏图标叠加) <Window.Resources> <DrawingImage x:Key="OverlayIma ...
- win10 系统右键菜单不显示文字(只有小图标)修复方法
如下图,win10点击鼠标右键调出菜单时,看不到菜单的文字,只显示了小图标. 解决方法: Cortana 搜索 cmd ,看到 命令提示符,右键,选择 以管理员身份运行. 在命令提示符里输入以下命令, ...
- 如何更换织梦cms系统的网站小图标
织梦cms建站现在已经是很普遍的建站方式了,下面小编就分享一个简单的换网站小图标的方法! 一.登录自己网站的后台管理系统.在不修改织梦后台的情况下,默认的url是自己的网站后台dede目录下访问. 二 ...
- 利用WPF创建含多种交互特性的无边框窗体
咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...
随机推荐
- 16.MongoDB系列之分片管理
1. 查看当前状态 1.1 查看配置信息 mongos> use config // 查看分片 mongos> db.shards.find() { "_id" : & ...
- HTML基础知识(3)浮动、塌陷问题
1.浮动 1.1 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...
- mybatis-获取参数值的方式
MyBatis获取参数值的两种方式(重点) MyBatis获取参数值的两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值 ${}使用字符串拼接的方式拼接sql,若为字符串 ...
- java安全之CC1浅学(1)
前言 由于CC链还是比较复杂的,我们可以先看命令执行的部分payload之后再加上反序列化部分组成一个完整的payload 调试一 项目导入依赖,这里使用3.1版本 <!-- https://m ...
- NC 使用Nginx实现https的反向代理
summary: [通过Nginx实现NCC的https访问,并解决UClient应用的问题] 1 概述 通过Nginx 安装配置反向代理,实现NC.NCC的https访问. 本文以NCC2005为例 ...
- springboot的全局异常处理类
import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import or ...
- wiki搭建详细过程及步骤
wiki搭建详细过程及步骤 1.查看yum库中jdk的版本 2.选择java-1.8.0安装 3.配置环境变量 4.环境变量生效 5.查看jdk是否安装成功 6.启动mysql服务 7.下载confl ...
- 【Java并发010】使用层面:发令枪CountDownLatch全解析
一.前言 CountDownLatch是在java1.5被引入,存在于java.util.cucurrent包中,跟它一起被引入的工具类还有CyclicBarrier.Semaphore.concur ...
- Oracle 两字符串相似度比较
select SYS.UTL_MATCH.edit_distance_similarity('为中华之举起而读书','为中华') from dual;
- SpringCloud Alibaba(三) - GateWay网关
1.基本环境搭建 1.1 依赖 <!-- Gatway 网关会和springMvc冲突,不能添加web依赖 --> <dependency> <groupId>or ...