主要介绍一下在silverlight里的资源文件(图片, 视频, 字体之类)设置不同的Build
Action时在XAML或是后台C#里如何引用的问题.
就拿图片文件作例子来介绍各种Build Action的情况(选中一个文件后按F4打开vs属性面板就可以看到Build Action选项,
并可以更改)
假如我们有两个图片文件分别叫silverlight.png和sl.jpg, 把silverlight.png添加到应用的根目录里,
和我们的MainPage.xaml文件在一个文件夹, sl.jpg放到一个新建的images文件夹里
1. Resource:
选择这种生成方式后,该资源文件会被嵌入到该应用的程序集中,就是说打开生成的xap是看不到这个文件的.
可以用相对于当前的XAML文件的相对Uri访问, 如<Image Source="silverlight.png"
/>或是<Image Source="./silverlight.png" />, 在子文件夹里的可以用<Image
Source=”./images/sl.jpg” />访问到
最保险的方式是采用特有的程序集资源URI访问,格式为
<Image
Source="/{assemblyShortName};component/Foo.jpg"/>
,
这种方式还可以引用到xap中的其他程序集中的图片
修改我们的两个图片的引用方式为
复制内容到剪贴板
代码:
<Image
Source="/SilverlightApplication1;component/silverlight.png"/>
<Image Source="/SilverlightApplication1;component/images/sl.jpg"
Height="100"/>
你可以发现一样可以正常显示
如果没找到文件的话,系统不会再找别的位置了, 会触发ImageFailed事件
在Build Action为Resource时, 可以用一下几种相对URI来引用资源文件
复制内容到剪贴板
代码:
<Image
Source="/SilverlightApplication1;component/silverlight.png"
Height="100"/>
<Image Source="./silverlight.PNG" Height="100" />
<Image Source="silverlight.PNG" Height="100" />
<Image Source="/SilverlightApplication1;component/images/sl.jpg"
Height="100"/>
<Image Source="./images/sl.jpg" Height="100" />
注意这种生成方式的系统资源可以直接用
Application.GetResourceStream(uri).Stream在代码里来得到
2. Content:
用这种方式生成XAP后文件会被添加到xap文件中,用压缩工具打开我们生成的xap后可以看到我们的图片文件,silverlight.png在应用
的"根"目录, 而sl.jpg文件存放在images文件夹中
这种情况下, 访问这两个图片的相对Uri需要以"/"开始
复制内容到剪贴板
代码:
<Image Source="/silverlight.PNG" Height="100" />
<Image Source="/images/sl.jpg" Height="100" />
注意在这种方式下, 如果没有在xap中找到图片文件,
那么silverlight会自动从当前xap应用所在的文件夹下来找所需图片文件,如果还没有找到那么就触发ImageFailed事件,
这种方式比较适合在多个程序集引用相同文件时采用
3. None:
None表示不作生成处理, 我们的图片文件不会被拷贝到XAP文件中,需要考虑的是"CopyToOutputDirectory"这个选项,
这个选项有三个选择"Do not copy","Copy always","Copy if newer", 因为我们需要引用图片文件,
我们可以选择后两个中的一个,这样在项目编译后,可以看到在xap的所在文件里会有一个silverlight.png文件和一个images文件夹,
sl.jpg文件就在images文件夹里
引用文件的Uri方式同第二种Content方式
在大多数情况下, 我们希望把video/audio文件放到xap的外面,因为这种文件一般都比较大, 会影响silverlight应用的加载,
而且一般的视频音频文件都是压缩格式的,放到xap中也不会起到减少他们文件大小的作用.
类似图片视频这种资源文件生成操作为None时和他们没有被添加到项目里是一样的, 都可以用绝对Uri进行引用
小结:
相对Uri引用:[/i]
复制内容到剪贴板
代码:
<Image Source="/silverlight.PNG" Height="100" />
<Image Source="/images/sl.jpg" Height="100" />
[i]绝对路
径引用:
复制内容到
剪贴板
代码:
<Image
Source="http://localhost:50235/clientbin/silverlight.PNG" Height="100"
/>
<Image Source="http://localhost:50235/clientbin/images/sl.jpg"
Height="100" />
4. EmbeddedResource:
这种方式会把文件嵌入到程序集中, silverlight无法通过Uri引用在xaml和c#里对这个文件进行使用,
微软不建议在silverlight采用这种方式在程序集里嵌入资源.
如果有这种需求可以用
Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(string
path)
相关的方法得到文件的stream引用
我建议直接改为第一种的"Resource"方式, 然后采用第一种的引用方式就可以了
关于Resource方式和EmbeddedResource的不同我不多介绍了,
如果感兴趣的话可以用reflector工具打开你的程序集dll文件, 在Resources目录下可以看到两者的不同之处,
用Resource嵌入的资源会被系统放到AppName.g.resources中,而采用EmbeddedResource方式的资源会被直接放到
Resources目录下,其他的细节就不介绍了.
转帖:http://bbs.blueidea.com/thread-2941697-1-1.html
分享到:
相关推荐
WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源。其中较为常见的情况是用Uri加载图像。Uri加载图像资源有多种方式,可从外部文件夹中加载,也可以直接引用工程的资源图片……
本文总结了WP8中的uri关联和文件关联的实现方法,不妥之处请批评指正
通过网上的搜索,感觉Silverlight Loader挺好用的,下面详细介绍一下怎么使用Silverlight Loader。 Silverlight Loader的下载地址如下:http://silverlightloader.codeplex.com/ 其实文章并不长,只有下面红色的...
Uri转Path
void Page_Loaded(object sender, RoutedEventArgs e) ... uploadControl.UploadUrl = uri; uploadControl.UploadChunkSize = 25000000; //uploadControl.ResizeImage = true; //uploadControl.ImageSize = 1024; }
首先创建一个文件,用于保存拍照图像,然后根据不同系统版本获取Uri,传递给Intent,然后调起相机(可以考虑将outputImage、imageUri设置为全局变量)。 3、处理回调 使用BitmapFactory读取imageUri,得到bitmap,...
最近在工作的过程中,遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。 因为需求的原因,要求拍照上传或者从相册中选择图片上传,而且图片是需要经过压缩的,大小不能超过2M。 很快,拍照的这部分...
Uri - 一个URI处理库
Data URI浅析 上来和大家分享……
androdi ContentProvider和Uri详解
通过URI获取文件Path(支持QQ文件管理器,下载文件夹,共享媒体文件)
android 根据uri获取真实路径
浅析什么是URI 什么是URL:
1、将一个文件路径path转换成File String path ; File file = new File(path) 2、讲一个Uri转换成一个path 以选择一张图片为例: String path = FileTools.getRealPathFromUri(content,uri); //自定义...
DownloadStringAsync(Uri address, Object userToken) - 以字符串的形式下载指定的 URI 的资源 UploadStringAsync(Uri address, string data) - 以字符串的形式上传数据到指定的 URI。所使用的 HTTP 方法默认为 POST...
实现,包括 URI 和 URI 引用。 目标 此 crate 的目标是提供用于有效创建、修改和解析 URI、相对引用和 URI 引用的类型。 下面分别介绍这三种类型。 什么是URI ? URI 代表统一资源标识符,用于标识某些资源。 好...
react-native-svg-uri, 在来自URL或者 static 文件的本地响应中,呈现SVG图像 react-native-svg-uri从URL或者 static 文件中呈现来自React的SVG图像这是用 rn 0.33和 react-native-svg 4.3.1 ( 依赖于此库) react-...
Awstats是一套非常好用的免费的日志分析软件,他是用perl实现的,支持web log、ftp log和mail log;而且它还能自动根据你浏览器的字符设置来选取语言(支持中文). 但是缺省安装的话有个问题,就是用来搜索的关键字如果是...
Silverlight中动态加载dll文件 private void btnGetResource_Click(object sender, RoutedEventArgs e) { Grid grid = this.FindName("grid") as Grid; if(grid.Children.Count==0) { WebClient webClient = ...
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core],解决办法:WEB/INF的lib下,除了导入jstl.jar包,还要导入standard.jar包。另外,解压standard.jar包,把.tld文件...