WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上。WPF中,资源定义的位置决定了该资源的可用范围。资源可以定义在如下范围中:

(1)控件级:此时,资源只能套用在这个Object控件,或套用至该控件的子控件。

(2)文件级:如果将资源定义在Window或Page层级的XAML档中,那么可以套用到这个文件中的所有物件。

(3)应用程序级:如果我们将资源定义在App.xaml 中,那么,就可以将资源套用到应用程序内的任何地方。

(4)字典级:当我们把资源封装成一个资源字典, 定义到一个ResourceDictionary的XAML文件时,就可以在另一个应用程序中重复使用。

资源的查询方式

Static Resource的查询

(1)查找使用该资源的元素的Resource字典;

(2)顺着逻辑树向上查找父元素的资源字典,直到根节点;

(3)查找Application资源;

(4)不支持向前引用,即:不能引用在引用点之后才定义的资源。

Dynamic Resource的查询

(1)查找使用该资源的元素的Resource字典;如果元素定义了一个Style 属性,将查找Style中的资源字典;如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典。

(2)顺逻辑树向上查找父元素的资源字典,直到根节点;

(3)查找Application资源;

(4)查找当前激活状态下的Theme资源字典;

(5)查找系统资源。

如上所述,可是在使用的时候,碰到媒体资源文件(视频,音乐),总就不那么好使了,规则如下:

文件编译方式

资源和使用者是否同工程下

写法

是否可用

Resource

Source="/MediaPlay;component/media/test.png"

图片可用,媒体文

件不可用

Resource

Source="pack://application:,,,/MediaPlay;component/media/test.png"

图片可用,媒体文

件不可用

内容,复制

Source="/media/aaa.png

图片适用,媒体不适用

内容,复制

绝对路径

图片媒体均适用

综上:

当使用媒体资源时,应当使用绝对路径,如有其他方式,请留言。谢谢。

05-28 22:27