图片,音频、视频,甚至XML和XAML等非执行数据文件都叫做资源,根据资源所处位置的不同而有所区别,先了解下Silverlight 应用程序的结构。
在.xap压缩包中,有一个Appmanifest.xaml文件,定义了打包的程序集和应用程序入口;一个application程序集;0个或多个library程序集;0个或多个资源文件,如图片、视频等。整个.xap在应用程序激活之前都已经下载到客户本地,而on-demand文件,顾名思义,需要的时候再予以加载。
由此可见,资源文件可分布在多个位置,如镶嵌入程序集内;在.xap压缩包内而不镶嵌入任何程序集内;不在程序集内也不在.xap内。当在工程中添加一个资源如pink.png图片时,右键之,选择属性,可以在"Build Action"中,分别选择Resource、Content 和 None 可使资源文件生成在对应上述三个位置。(其他选项在Silverlight中没什么作用)
在工程中引入资源文件,即引入在与page.xaml同目录下,默认的"Build Action"选项是"Resource",即镶嵌入相应程序集内,这时引用该资源不应该以反斜杠开头。若把资源文件放在ClienBin同目录下,则相当于None,引用时需要以反斜杠开头。可参见《Silverlight Image Source URI》一文,理解是否以反斜杠开头的区别。
不建议把资源文件放在page.xaml同目录下,然后选择"Build Action"为"None",换句话说,若不想资源文件打包进.xap中,直接把资源文件放在ClienBin文件目录下。但可以把page.xaml同目录下的资源文件属性中的"Build Action"改为"Content",使其放在.xap压缩包中,方便.xap中多个程序集的共同使用。既然此时资源文件在.xap压缩包内,引用该文件则需要以反斜杠开头。这就是《Silverlight Image Source URI》一文最后提到的,为什么资源文件放在page.xaml同目录下,却可以使用反斜杠开头来引用。示例代码和运行结果如下。
<StackPanel Background="White" Orientation="Vertical">
<Image x:Name="blue" Source="/images/blue.png" Stretch="None"/>
<Image x:Name="green" Source="images/green.png" Stretch="None" />
<Image x:Name="pink" Source="/images/pink.png" Stretch="None" />
</StackPanel>
对应Silverlight应用程序结构,本示例三个资源文件,ClientBin目录下(包含下级目录,只不过把所有Image都放在一个文件夹里了)的blue.png是按需索取的松散资源,没有镶嵌到任何程序集内;page.xaml同目录下的green.png的Build Action是Resource,最终其被生成在.xap压缩包内的dll文件中,即镶嵌到了application程序集中;而pink.png由于Build Action被更改为Content,生成后,其位于.xap压缩包内,(故而需要反斜杠开头来引用)但不在任何程序集。
2008年10月12日
RSS导入文章来源:http://hi.baidu.com/liongg/blog/item/c258f8194c02ec7cdab4bd4f.html