隐藏窗体任务栏图标

/// <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]创建系统栏小图标的更多相关文章

  1. 【electron系列之一】创建右下角通知栏小图标

    electron 用Tray对象来实现右下角通知栏小图标 一.先引入app, BrowserWindow来实现浏览器功能,接着引入Tray, Menu来实现右下角 二. new Tray('./pag ...

  2. (29)odoo的可用小图标

    * 系统的小图标都采用了 fontawesome    官网是 http://fontawesome.dashgame.com/    * 运用小图标    # 首先打开官网 http://fonta ...

  3. odoo开发笔记--odoo可用小图标

    odoo系统的小图标都采用了 fontawesome字体图标 官网: http://fontawesome.dashgame.com/ Github:http://fortawesome.github ...

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

    一 基本功能 1. 这里是用 NotifyIcon 控件来实现,但 WPF 下没有 NotifyIcon  控件,怎么办,用 WinForm 下的呗. 先引用  .NET 自带的两个程序集 Syste ...

  5. 利用overflow实现导航栏中常 出现的倒三角下拉小图标

    常用网页界面中,导航栏中的倒三角下拉小图标实现,可用overflow: 效果如右图: .Triangle{position:relative;width:280px;height:15px;} ;ov ...

  6. WPF编程,指定窗口图标、窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法。

    原文:WPF编程,指定窗口图标.窗口标题,使得在运行状态下任务栏显示窗口图标的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_4330793 ...

  7. WPF——TaskBarIconOverlay(任务栏图标叠加)

    原文:WPF--TaskBarIconOverlay(任务栏图标叠加) <Window.Resources> <DrawingImage x:Key="OverlayIma ...

  8. win10 系统右键菜单不显示文字(只有小图标)修复方法

    如下图,win10点击鼠标右键调出菜单时,看不到菜单的文字,只显示了小图标. 解决方法: Cortana 搜索 cmd ,看到 命令提示符,右键,选择 以管理员身份运行. 在命令提示符里输入以下命令, ...

  9. 如何更换织梦cms系统的网站小图标

    织梦cms建站现在已经是很普遍的建站方式了,下面小编就分享一个简单的换网站小图标的方法! 一.登录自己网站的后台管理系统.在不修改织梦后台的情况下,默认的url是自己的网站后台dede目录下访问. 二 ...

  10. 利用WPF创建含多种交互特性的无边框窗体

    咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...

随机推荐

  1. C语言------选择结构

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3 .源代码及运行截图 4.小结 1 .实训名称 实训4:选 ...

  2. goroutine&waitgroup下载文件

    0.1.索引 https://blog.waterflow.link/articles/1663078266267 当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错.那么我么我们可以利用g ...

  3. 【原创】在RT1050 LittleVgl GUI中嵌入中文输入法框架

    时隔一年多终于又冒泡了,哎,随着工作越来越忙,自己踏实坐下来写点东西真是越来越费劲,这篇文章也是准备了好久好久才打算发表出来(不瞒大家,东西做完好久了,文章憋了一年了,当真"高产" ...

  4. Debian玩红警2

    Debian玩红警2 1. 安装wine sudo apt update sudo apt install wine wine --version wine-5.0.3 (Debian 5.0.3-3 ...

  5. iOS开发应用上传AppStore的步骤

    原文:http://blog.csdn.net/ayangcool/article/details/46647693   前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的 ...

  6. 原生Ajax处理文件流

    在通过Ajax处理请求时,可能会遇到需要下载文件的情况,这里简要的说明下处理方法. let downloadFile = document.getElementById("downloadI ...

  7. csharp 基础

    1.C#基础 1.1 C#简介 C#是一个面向对象的.由微软开发的高级编程语言,它专门为公共语言基础结构(CLI)设计的,CLI是由可执行代码和运行时环境组成的. C#语言在编写时有点像JAVA,在运 ...

  8. zk系列二:zookeeper实战之分布式统一配置获取

    前面介绍了zk的一些基础知识,这篇文章主要介绍下如何在java环境下获取zk的配置信息:主要基于zk的监听器以及回调函数通过响应式编程的思想将核心代码糅合成一个工具类,几乎做到了拿来即用: 在分布式集 ...

  9. JetBrains新产品Aqua——自动化测试开发工具(抢鲜体验)

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/9a093c88.html 你好,我是测试蔡坨坨. 随着行业内卷越来越严重,自动化测试已成为测试工程师的必备技能,谈及自动化测 ...

  10. 2022-11-12 Acwing每日一题

    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...