WPF 之 资源(Resource)

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

也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。

  包含两种资源:静态资源(Static Resource),动态资源(Dynamic Resources)。这两者的区别是:

  [1]静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改。

  [2]动态资源则是在运行时决定,当运行过程中真正需要时,才到资源目标中查找其值。因此,我们可以动态地修改它。由于动态资源的运行时才能确定其值,因此效率比静态资源要低。

2、资源的范围(层级):
  WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上。WPF中,资源定义的位置决定了该资源的可用范围。资源可以定义在如下范围中:
  (1)物件级:此时,资源只能套用在这个Object物件,或套用至该物件的子物件。
  (2)文件级:如果将资源定义在Window或Page层级的XAML档中,那么可以套用到这个文件中的所有物件。
  (3)应用程序级:如果我们将资源定义在App.xaml 中,那么,就可以将资源套用到应用程序内的任何地方。
  (4)字典级:当我们把资源封装成一个资源字典, 定义到一个ResourceDictionary的XAML文件时,就可以在另一个应用程序中重复使用。

  每一个框架级元素(FrameworkElement 或者FrameworkContentElement)都有一个资源属性。每一个在资源字典中的资源都有一个唯一不重复的键值(key),在标签中使用x:Key属性来标识它。一般地,键值是一个字符串,但你也可以用合适的扩展标签来设置为其他对象类型。非字符键值资源使用于特定的WPF区域,尤其是风格、组件资源,以及样式数据等。

3、StaticResources的适用场合:
  (1)在资源第一次引用之后无需再修改资源的值。
  (2)资源引用不会基于运行时的行为进行重新计算,比如在重新加载Page/Window的时候。
  (3)当需要设置的属性不是DependencyObject或Freezable类型的时候,用StaticResource。
  (4)当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享时,也使用StaticResource。
  (5)当需要为一个自定义控件创建一个Theme,并Theme中使用资源,就需要使用StaticResource。因为StaticResource的资源查找行为时可预测的,并且本身包含在Theme中。而对于DynamicResource,即使资源是定义在Theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。
  (6)当需要使用资源设置大量的依赖属性(Dependency Property)的时候。
由于依赖属性具有属性系统提供的值缓存机制,所以,如果能在程序装载时设置依赖属性的值,这样,依赖属性就不需要检查自己的值并返回最后的有效值了。
 
4、Dynamic Resource一般使用在如下场合:
  (1)资源的值依赖一些条件,而该条件直到运行时才能确定。
包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和操作系统。
  (2)为自定义控件引用或创建Theme Style。
  (3)希望在程序运行期间调整资源字典的内容时。
  (4)希望资源可以向前引用时(如上面在Canvas中引用innerLgbResource一样)
  (5)资源文件很大,希望在运行时才加载。
  (6)要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。
  (7)当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。
  Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的。

5、资源的查询方式
  Static Resource的查询
  (1)查找使用该资源的元素的Resource字典;
  (2)顺着逻辑树向上查找父元素的资源字典,直到根节点;
  (3)查找Application资源;
  (4)不支持向前引用,即:不能引用在引用点之后才定义的资源。

  Dynamic Resource的查询
  (1)查找使用该资源的元素的Resource字典;
如果元素定义了一个Style 属性,将查找Style中的资源字典;如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典。
  (2)顺逻辑树向上查找父元素的资源字典,直到根节点;
  (3)查找Application资源;
  (4)查找当前激活状态下的Theme资源字典;
  (5)查找系统资源。

时间: 2024-11-02 23:40:37

WPF 之 资源(Resource)的相关文章

WPF 中资源路径的问题

WPF 中资源路径的问题 1. 引用当前工程的资源(注意xxxx.png的build action 应设置为Resource 或Embedded Resource) ? 1 <ImageBrush ImageSource="/currentAssemblyName;component/subfoldername/xxxx.png"/> 2.引用其它工程的资源  (注意xxxx.png的build action 应设置为Resource 或Embedded Resource)

wpf 引用资源文件

一.什么是资源 通常使用  WPF  资源作为重用通常定义的对象和值的简单方法. 在 WPF 中资源通常用作"样式"(Style).样式模板.数据模板等. 二.资源的定义及 XAML 中引用 资源可以定义在以下几个位置: 1 应用程序级资源 定义在 App.xaml 文件中, 作为整个应用程序共享的资源存在  ; 在 App.xaml 文件中定义: <Application.Resources> <ResourceDictionary> <Resource

22个经典的WPF源代码资源合集

22个经典的WPF源代码资源合集 http://download.csdn.net/album/detail/1503

Android - 资源(resource)转换为String

资源(resource)转换为String 本文地址: http://blog.csdn.net/caroline_wendy Android建议资源的动态绑定, 即把string写入资源内, 然后执行动态绑定. 有时需要把资源(resource)ID转换为相应的字符串String. 使用: String mystring = getResources().getString(R.string.mystring); 即可.

WPF 调用资源图片

原文:WPF 调用资源图片 最近做的wpf项目中,在开发的时候,把图片放到了bin下面,采用了imagePath =System.IO.Directory.GetCurrentDirectory()+"/images/starShow.jpg";获得图片是可以的,可是发布之后却获取不到图片,这让我很纠结,后来通过把图片添加到了资源中,然后调用资源即可解决了问题 imagePath = "pack://application:,,,/Financial;component/Pr

WPF之资源

我们把有用的东西称为资源,程序中存放数据的地方有很多,可以放在数据库里,可以存储在变量里,界于数据库存储与变量存储之间,我们还可以把数据存储在程序主体之外的文件里.外部文件与程序主体分离,这就有可能丢失或损坏,为了避免丢失或损坏,编译器允许我们把外部文件编译进程序主体,称为程序主体不可分割的一部分,这就是传统意义上的程序资源,也成为二进制资源. WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源.每个界面元素都可以携带自己的资源并可被自己的子级元素共享. 对象资源 每个WPF的界面

[WPF]静态资源(StaticResource)和动态资源(DynamicResource)

一.文章概述 本演示介绍了WPF的静态资源和动态资源的基本使用,并对两者做了简单的比较. 静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了:动态资源(DynamicResource)使用指的是在程序运行过程中然会去访问资源. 相关下载(代码.屏幕录像):http://pan.baidu.com/s/1c0q2BVM 在线播放:http://v.youku.com/v_show/id_XODE4MTI1MzYw.html 温馨提示:如果屏幕

Android学习笔记(三九):资源resource(下)

在上一次学习笔记中,学习了XML文件的解析,实际上一些简单的activity属性,一些简单的信息,我们也可以放入xml文件中,可以直接放入res/vaules,由系统来进行解析,而无须使用XmlPullParser来自己分析. Dimension 用于字体大小,间距pading等等.常用的尺寸大小详细见Android 学习笔记(十四):Activity-AutoCompleteTextView,一般我们使用dip/dp和sp,因为和in(inch),mm,以及px(像素点)不同,它和物理屏幕尺寸

【转】【WPF】资源读取 URI

一开始看到WPF里面经常用如下语句来构造资源文件Uri: Uri uri = new Uri("/AssemblyName;component/image.png"); 我还以为这种格式的字符串是URI标准规定的,但是网上查了一下却没发现有这种格式的URI字符串. URI是统一资源标识符,通用文法为: 协议名(http,https,ftp,file等)+冒号+协议所对应的内容 URI又分为URL和URN,URL是用来定义一个资源的访问路径.而URN则是用来定义一个资源的名称.(http