WPF整理-二进制资源和内容
WPF中的Binary Resource(二进制资源)是相对于前面所说的Logical resource(逻辑资源)而说的,一般指Image、XML文件等。
注意:这里说的是Resource"资源",和Content"内容"是不同的。
1.Content VS Resource
一般我们向工程中添加一个二进制的资源,如图片。我们设置它的属性,设置成资源和内容是不同的!

简单的说下两者的区别:
“When the Build Action is set to Content (as in the jellyfish example), the resource is not
included in the assembly. This makes it more appropriate when the resource needs to change
often (perhaps by a designer) and a rebuild would be undesirable. Also, if the resource is
large, and not always needed, it's better to leave it off to the resulting assembly. Note that to
access the resource, the exact same syntax is used. This is possible because WPF adds the
AssemblyAssociatedContentFile attribute to the assembly, specifying the name of the
resource file. Here's a view with .NET Reflector:”

“That's why we were able to replace the jellyfish image with a desert image and get it to show
correctly given the name jellyfish.jpg without doing any kind of rebuilding.”
WHILE
“When the Build Action is set to Resource, the image file is stored as a resource inside the compiled
assembly. This is because the Build Action was set to Resource on the image. This makes
the actual image file unnecessary when deploying the application.
These resources are part of the assembly and are stored in a resource named
MyApplication.g.resources, where MyApplication is the name of the
assembly. Here's a snapshot from .NET Reflector:”

2.Access
对于Image,无论设置成Content,还是Resource,都可以很方便的访问,如下:
xaml中
<Image Source="Images/5.png" Width="100" Height="100" />
<Image Source="Images/6.png" Width="100" Height="100" />
C#中
image1.Source = new BitmapImage(new Uri("Images/5.png", UriKind.Relative));
image2.Source = new BitmapImage(new Uri("Images/6.png", UriKind.Relative));
并没有区别。
3.Point of Interest
其他的,如xml file,两者访问方法就有区别了!
“Accessing a binary resource in XAML is pretty straightforward, but this works for standard
resources such as images. Other types of resources may be used in code, and this requires
a different approach.”
譬如有这样的一个xml file

如果,我们将生产操作设置成为Content,则我们可以这样访问:
var books = XElement.Load("Xml/books.xml");
var bookList = from book in books.Elements("Book")
orderby (string)book.Attribute("Author")
select new
{
Name=(string)book.Attribute("Name"),
Author=(string)book.Attribute("Author")
};
foreach (var book in bookList)
{
txtBook.Text += book.ToString() + Environment.NewLine;
}
或者是:
var info = Application.GetContentStream(new Uri("Xml/books.xml", UriKind.Relative));
var books = XElement.Load(info.Stream);
var bookList = from book in books.Elements("Book")
orderby (string)book.Attribute("Author")
select new
{
Name=(string)book.Attribute("Name"),
Author=(string)book.Attribute("Author")
};
foreach (var book in bookList)
{
txtBook.Text += book.ToString() + Environment.NewLine;
}
如果设置成Resource,则以上程序会报告无法找到xml file。

因此,设置成Resource时,我们应该这样访问:
var info = Application.GetResourceStream(new Uri("Xml/books.xml", UriKind.Relative));
var books = XElement.Load(info.Stream);
var bookList = from book in books.Elements("Book")
orderby (string)book.Attribute("Author")
select new
{
Name=(string)book.Attribute("Name"),
Author=(string)book.Attribute("Author")
};
foreach (var book in bookList)
{
txtBook.Text += book.ToString() + Environment.NewLine;
}
两种情况下,程序运行如下:
WPF整理-二进制资源和内容的更多相关文章
- wpf之二进制资源
一.当需要添加图片.音频.视屏的资源到wpf项目里是,可以直接把文件添加到项目里 右击add->existing item. 1.如果想将外部文件编异常目标成为二进制资源,在文件的属性窗口 Bu ...
- WPF 应用程序资源、内容和数据文件
MSDN相关介绍: http://msdn.microsoft.com/zh-cn/library/aa970494(v=vs.100).aspx 内容文件(Content Files)内容文件简单的 ...
- WPF整理-Style
"Consistency in a user interface is an important trait; there are many facets of consistency, ...
- 《Programming WPF》翻译 第6章 3.二进制资源
原文:<Programming WPF>翻译 第6章 3.二进制资源 尽管ResourceDictionary和系统级别的资源适合于作为数据存在于对象中,然而,并不是所有的资源都能很好的满 ...
- WPF整理-使用逻辑资源
"Traditional application resources consist of binary chunks of data, typically representing thi ...
- WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源.DynamicResource 动态资源.添加二进制资源.绑定资源树) 一.WPF对象级(Window对象)资源的定义与查找 实例一: St ...
- WPF中的资源(二) - 二进制资源
原文:WPF中的资源(二) - 二进制资源 WPF中的二进制资源,就是类似于MFC中在对话框程序中添加的图片.字符串等资源,程序在运行时将其转换成二进制,以供程序使用. 下面以将字符串转换成二进制为例 ...
- WPF整理-XAML构建后台类对象
1.XAML 接触WPF的第一眼就是XAML---XAML是用来描绘界面的.其实不然! "Actually, XAML has nothing to do with UI. It's mer ...
- WPF学习之资源-Resources
WPF学习之资源-Resources WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过Resour ...
随机推荐
- Delphi的 Format格式化函数
转载自:http://www.cnblogs.com/mumble/archive/2011/05/25/2056462.html Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮 ...
- HP-SOCKET TCP/UDP通信框架库解析
项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- 收缩SQL Server数据库文件
收缩整个数据库 DBCC SHRINKDATABASE (dbName) 收缩单个文件DBCC SHRINKFILE (FileName) 查找所有的文件名称USE dbNameEXEC sp_hel ...
- 大数据项目实践:基于hadoop+spark+mongodb+mysql+c#开发医院临床知识库系统
一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS ...
- I Could Have Danced All Night
百老汇著名音乐剧<窈窕淑女(My Fair Lady)>中脍炙人口的经典歌曲. Bed, bed ,I couldn't go to bed床,床,我不能上床去 My head's too ...
- MR操作
MR操作————Map.Partitioner.Shuffle.Combiners.Reduce 1.Map步骤 1.1 读取输入文件,解析成k-v对,其中每个k-v对调用一次map函数 1.2 写自 ...
- [原创] Go语言在Centos上的部署
序言 Golang是个好东西啊.部署非常简单,对于运维人员来说太爽了. 传统的Nginx啊Apache啊,外加PHP以及各个插件啊搞得头晕. 用了Go之后就什么都不需要了.只要把生成好的文件向服务器上 ...
- memcache的lru删除机制
惰性删除,get时才删除 LRU原理:当某个单元被请求的时候,维护一个计数器,通过计数器来判断最近谁最少使用,那就把谁踢出去. 注:即使某个key设置的永久有效,也会被踢出来,这个就是永久数据被踢的现 ...
- C# 解析JSON的几种办法
欲成为海洋大师,必知晓海中每一滴水的真名. 刚开始只是想找一个转换JSON数组的方法,结果在MSDN翻到一大把. 搜索过程中免不了碰到一大堆名词:WCF => DataContract => ...
- ViewPager+Fragment取消预加载(延迟加载)(转)
原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...