[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窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...
随机推荐
- 简单将Springboot项目部署到linux服务器上
1.使用springboot的jar包方式 直接使用maven工具按照步骤点击就可以直接打包 2.到target目录下找到 jar包 3.将jar包放到linux的任意文件夹下(此项目是之前的kafk ...
- Linux系统管理_网络管理
常用网络指令 yum -y install net-tools #安装ifconfig工具 ifconfig #查看网络配置 ifup ens33 #启用网卡 ifdown ens33 #禁用网卡 s ...
- 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-MUFFIN:用于DDI预测的多尺度特征融合
2.(2021.3.15)Bioinformatics-MUFFIN:用于DDI预测的多尺度特征融合 论文标题: MUFFIN: multi-scale feature fusion for drug ...
- 27.路由器Routers
像一些reils这样的web框架提供自动生成urls的功能,但是Django没有 rest framework为django添加了这一功能,以一种简单.快速.一致的方式 routers必须配合view ...
- 前端html和css总结
1.html知识总结 1.1 表格的的相关属性 属性 表示 border-collapse 设置表格的边框是否被合并为一个单一的边框 cellpadding 单元格边距 cellspacing 单元格 ...
- C#中winform DataGridView常用修改点
1.修改列名 一般情况下,从数据库里面读取的列名是英文或者拼音,但是,有时候显示需要中文,这样就需要修改列名了. dgv.Columns[0].HeaderCell.Value="编号&qu ...
- Windows版CheatSheet——一键显示当前程序快捷键列表
Windows系统上的各种软件有太多的快捷键,想要记住是几乎不可能的,推荐一个一键显示当前软件快捷键的软件,在使用其他程序的时候,只要按下Ctrl+`就可以理解弹出该软件的所有快捷键列表,还支持收藏功 ...
- js和jquery页面初始化加载函数的方法及顺序
运行下面代码.弹出A.B.C.D.E的顺序:A=B=C>D=E. <html> <head> <title>首页</title> <scri ...
- 重学c#系列——动态类型[二十二]
前言 该系列准备继续完善,一共108篇,持续更新. 正文 为什么有动态类型呢? 是因为很多东西天生就是动态类型的. 比如xml 和 json.cvs.数据库表,这些本来就是数据类型的. 在反射系列中提 ...
- python中调用C代码
首先我们需要明晰为什么我们需要在python中调用C语言的代码,原因不外乎有二: 其一,python不擅长"大量运算"任务,而擅长于编写简单,"IO密集型作业" ...