Silverlight中文件的生成操作与其对应的获取方法

来源:互联网 发布:网络版点歌软件 编辑:程序博客网 时间:2024/06/14 12:34

最近在学习关于WriteableBitmapEx库的东西,在用FromResource函数是遇到问题,后来发现是因为Build Action设置的问题引起的。之后就查找了一些知识。

 

 

文件生成操作:

Silverlight里的资源文件(图片、视频、字体、XML、XAML等) 生成操作属性选择不同选项时,文件的生成方式和存储位置会有相应变化,下面说一下几个常用的选项:

1、 Page:一般xaml文件都用这个。

2、 Compile一般cs文件都用这个

3、 ApplicationDefinition一般程序入口文件都用这个(默认为App.xaml)

4、 Resource

一般程序里的资源文件设置成Resource状态时,编译之后文件会被嵌进程序集(dll)中, dll们放在xap包里。(可以用Reflector.exe看一下dll的内容,一看便知)。

5、 Content

一般程序里的资源文件设置成Content状态时,编译之后文件不会被嵌进程序集(dll)中,而是放在dll外,与dll们一起放在xap包里。(可以把xap包解压缩,一看便知)。

小结:

最后两个选项是最常用的,个人觉得掌握了这两种一般应用就够了,其他的选项不是很常用,如有特殊需要可以去MSDN家找找看。

 

文件获取方法:

下面以图片为例说一下各种文件的获取方法:在工程里添加一个文件夹Images,然后添加一张图片background.jpg。

1、 background.jpg的生成操作属性选择 Resource时,编译后将被嵌在程序集(dll)里,获取方式如下:

<Image Source="./Images/background.jpg"></Image>

<Image Source="../Images/background.jpg"></Image>

<Image Source="Images/background.jpg"></Image>

<Image Source="/SilverlightApplication1;component/Images/background.jpg"></Image>

2、 background.jpg的生成操作属性选择 Content时,将被生成在程序集(dll)外,以文件形式存在于xap包里,获取方式如下:

<Image Source="/Images/background.jpg"></Image>

3、 background.jpg以文件形式存在于ClientBin文件夹里,获取方式如下:

<Image Source="/Images/background.jpg"></Image>

 

归纳一下以上几种获取文件的方法:

1、 相对路径:

1)   前加“./”:<Image Source="./Images/background.jpg"></Image>

2)   前加“../”:<Image Source="../Images/background.jpg"></Image>

3)   不加任何前导符:<Image Source="Images/background.jpg"></Image>

4)   前加“/”:<Image Source="/Images/background.jpg"></Image>

前三种写法相对路径根目录为程序集(dll),默认在程序集里找图片。第二种路径前加“../”的情况,应用在子文件引用父文件夹里图片时。第四种写法也是相对路径,但是根目录为xap包,默认在dll所在xap包里找图片。

以上四种情况如果在dll或者xap包里找不到图片,有个回退机制控制程序去ClientBin里找图片,如果还没找到就报错。

2、 指定程序集

<Image Source="/SilverlightApplication1;component/Images/background.jpg"></Image>

这种情况指定在某程序集里找图片,如果找不到就报错,不会去其他地方找。

3、 绝对路径

<Image Source="http://img1.cache.netease.com/cnews/2009/10/7/200910070216124029d.jpg"></Image>

这种情况就无所谓了,图片有就是有,没有就报错。

4、 代码获取

在cs代码里用程序实现获取图片也很简单,路径的写法与上述三种一样,例如:

BitmapImage bitmapImage = new BitmapImage();

bitmapImage.UriSource = new Uri("Images/background.jpg", UriKind.RelativeOrAbsolute);

this.img.Source = bitmapImage;

 

 

 

内容(Content) - 不编译该文件,但将其包含在“内容”(Content) 输出组中。

编译(Compile) - 将该文件编译到生成输出中。此设置用于代码文件。 

嵌入资源(Embedded Resource) - 将该文件作为 DLL 或可执行文件嵌入主项目生成输出中。

内容的读写和运行目录下的其他文件没有区分。

编译和嵌入资源读写,需要用到,例如:

GetType().Assembly.GetManifestResourceStream(assembleName + ".AppDesc.xml");

 

 

原文链接:http://www.cnblogs.com/yqy3310/archive/2010/01/26/1579458.html

http://www.cnblogs.com/yinhaiming/articles/1717374.html