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

图片适用,媒体不适用

内容,复制

绝对路径

图片媒体均适用

综上:

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

WPF媒体资源和图片资源寻址方式的杂谈的更多相关文章

  1. WPF 基础 - 资源

    为了避免丢失和损坏,编译器允许我们把外部文件编译进程序主体.成为程序主体不可分割的一部分,这就是传统意义上的程序资源,即二进制资源: WPF 的四个等级资源: 数据库里的数据 (仓库) 资源文件 (行 ...

  2. Magicodes.WeiChat——媒体资源选择组件之media-choice(开源)

    media-choice为媒体资源选择组件,基于KnockoutJs.支持图片.语音.视频.图文的选择以及预览,支持默认选择类型,支持是否禁用选择类型的更改. 使用示例: <script id= ...

  3. WPF之资源字典zz

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

  4. Orchard官方文档翻译(九) 新增并管理媒体资源

    原文地址:http://docs.orchardproject.net/Documentation/Adding-and-managing-media-content 想要查看文档目录请用力点击这里 ...

  5. WPF 之 资源(Resource)

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

  6. WPF 中资源路径的问题

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

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

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

  8. WPF 访问资源中的Storyboard

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

  9. WPF学习资源整理

    WPF(WindowsPresentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的编程模型 ...

随机推荐

  1. java 线程排查问题流程

    1. 通过top命令查看当前系统CPU使用情况,定位CPU使用率超过100%的进程ID:2. 通过ps aux | grep PID命令进一步确定具体的线程信息:3. 通过ps -mp pid -o ...

  2. Android BlueDroid(一):BlueDroid概述

    关键词:bluedroid bluez作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误.共同学习.共同进步!! 一.名词解释:(实用信息添加中--) BTI F: ...

  3. 【t064】最勇敢的机器人

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] [背景] Wind设计了很多机器人.但是它们都认为自己是最强的,于是,一场比赛开始了~ [问题描述] ...

  4. jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件

    虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能.但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新 ...

  5. 在jsp页面里面设置全局引用文件

    head.jsp文件 将项目中所需要用到次数比较多的的插件,库等,同意放在一个jsp文件里面,命名为head.jsp文件,相当于一个全局的 <%@ page language="jav ...

  6. 从研究try catch 捕获不到异步错误谈谈学习方法的问题

    先看下面的代码,思考一下输出 try { throw new Error(3) } catch (e) { console.log(e) } try { setTimeout(function () ...

  7. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  8. 【16.67%】【codeforces 667C】Reberland Linguistics

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. Android Studio如何删除module

    当你想在Android Studio中删除某个module时,大家习惯性的做法都是选中要删除的module,右键去找delete.但是 在Android Studio中你选中module,右键会发现没 ...

  10. matlab 小波处理工具箱

    1. wavedec:多尺度(multilevel)一维小波分解 [C,L] = wavedec(X,N,'wname') [C,L] = wavedec(X,N,Lo_D,Hi_D) 返回值 L(b ...