WPF会将引用到的资源如图片、BAML文件等编译成二进制数据嵌入到已经编译了的程序集中。

下图是一个反编译后的程序目录结构:

那么,如何向项目中添加资源?

  • 向项目中添加文件
  • 设置生成操作(Build Action)为Resource
  • 重新编译项目

如何检索资源?

第一种方式,使用检索包装数据的对象StreamResourceInfo

StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new Uri("welcome.png", UriKind.Relative));

第二种方式,访问Assembly.g.resources资源流,查找到具体的对象

GetResourceStream()方法中封装了ResourceManager和ResourceSet类,这俩个类负责管理资源系统。我们可以使用这两个类来访问资源流。

Assembly assembly = Assembly.GetAssembly(this.GetType());
string resourcesName = assembly.GetName().Name + ".g";
ResourceManager rm = new ResourceManager(resourcesName,assembly);
using (ResourceSet set = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true))
{
UnmanagedMemoryStream memoryStream;
memoryStream = (UnmanagedMemoryStream)set.GetObject("welcome.png",true);
}

也可以将读取出来的Set遍历key值,来看一下具体的资源名称:

Assembly assembly = Assembly.GetAssembly(this.GetType());
string resourcesName = assembly.GetName().Name + ".g";
ResourceManager rm = new ResourceManager(resourcesName,assembly);
using (ResourceSet set = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true))
{
foreach (DictionaryEntry item in set)
{
MessageBox.Show(item.Key.ToString());
}
}

WPF程序集资源的更多相关文章

  1. 【WPF学习】第二十八章 程序集资源

    WPF应用程序中的程序集资源与其他.NET应用程序中的程序集资源在本质上是相同的.基本概念是为项目添加文件,从而Visual studio可将其嵌入到编译过的应用程序的EXE或DLL文件中.WPF程序 ...

  2. WPF教程八:如何更好的使用Application程序集资源

    这一篇单独拿出来分析这个程序集资源,为的就是不想让大家把程序集资源和exe程序强关联,因为程序集资源实际上是二进制资源,后续编译过程中会被嵌入到程序集中,而为了更方便的使用资源,我们要好好梳理一下程序 ...

  3. WPF中资源引用方式汇总

    在WPF应用程序开发中,总是难以记住各种访问资源的方法,遂逐一记下. 先从资源是否编译到程序集分类 一.程序集资源 资源在编译的时候嵌入到程序集中.WPF中的XAML会被编译为BAML,图片等其他资源 ...

  4. WPF之资源专题

    1.一般程序的资源可以分为四个等级: 数据库中的数据相当于放在仓库里 资源文件里的数据相当于放在旅行箱里 WPF对象资源里的数据相当于携带在背包里 变量中的数据相当于拿在手里 2.资源的查找顺序是沿着 ...

  5. WPF之资源字典zz

    最近在看wpf相关东西,虽然有过两年的wpf方面的开发经验,但是当时开发的时候,许多东西一知半解,至今都是模模糊糊,框架基本是别人搭建,自己也就照着模板写写,现在许多东西慢慢的理解了,回顾以前的若干记 ...

  6. WPF 之 资源(Resource)

    1.什么叫WPF的资源(Resource)? 资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎可以包含图像.字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性. ...

  7. WPF 中资源路径的问题

    WPF 中资源路径的问题 1. 引用当前工程的资源(注意xxxx.png的build action 应设置为Resource 或Embedded Resource) <ImageBrush Im ...

  8. WPF样式资源文件简单运用

    WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...

  9. WPF 访问资源中的Storyboard

    原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...

随机推荐

  1. 电信NBIOT 3 - 数据下行

    电信NBIOT 1 - 数据上行(中国电信开发者平台对接流程) 电信NBIOT 2 - 数据上行(中间件获取电信消息通知) 电信NBIOT 3 - 数据下行 电信NBIOT 4 - NB73模块上行测 ...

  2. bit和byte的区别是什么?

    bit(位/比特):计算机运算的基础单位: byte(字节):计算机中文件大小的基本计量单位. 转换关系:8 bit = 1 Byte1024 Byte = 1 KB1024 KB = 1 MB102 ...

  3. Django Form 实时从数据库中获取数据

    修改 models.py 添加 class UserType(models.Model): caption = models.CharField(max_length=32) 执行命令,生成数据库 p ...

  4. 17、DNS服务器

    DNS     domain  name system   域名系统   [root@li ~]# vim /etc/nsswitch.conf hosts:      files dns --涉及到 ...

  5. python爬虫(5)——BeautifulSoup & docker基础

    BeautifulSoup基础实战 安装:pip install beautifulsoup4 常用指令: from bs4 import BeautifulSoup as bs import url ...

  6. Java结构讲解

    Java结构有顺序结构.选择结构和循环结构. 顺序结构: 是Java的基本结构,除非特别说明,否则按顺序一句一句执行:也是最简单的结构:它是任何一个算法都离不开的一种基本算法结构. 选择结构: 1.i ...

  7. css 序

    盒模型 1.属性:width :内容的宽度 书写内容的宽度 height:内容的高度 书写内容的宽度 padding:内边框 内容到边框的距离  可以有  background-color borde ...

  8. vue-cli 3 和 vue-cli 2的区别

    分享文章: 浅谈vue-cli 3 和 vue-cli 2的区别 https://blog.csdn.net/weixin_42080056/article/details/81631661 vue- ...

  9. Dubbo支持的注册中心(二)

    1. Zookeeper 优点:支持网络集群 缺点:稳定性受限于 Zookeeper 2. Redis 优点:对服务器环境要求较高 缺点:对服务器环境要求较高 3. Multicast 优点:去中心化 ...

  10. Oracle EBS 11i下载的软件如何制作成linux使用的iso文件

    1.cd \soft\ebs11i 2.unzip Bxxxxx.zip Disk1 3.mkisofs -o zj.iso -R -v Disk1 mkisofs -o zj.iso -R -v D ...