使用Application.GetResourceStream从XAP安装包加载任意资源

不得不说,WP7开发的资料真的是太少了,国内有句话叫“天下文章一大抄”,查Application.GetResourceStream的用法,找遍了整个网络,无非就那一两篇,而且写得还不完整,包括微软官方的例子。在花了近半天的时间后,终于解决问题。 我们可以预先把程序中用到的资源,如图片,音乐等放入项目中,打包进XAP文档,需要的时候从中调用。下面就说说具体实现方法。 第一步,把数据存进项目。 1、右键点击项目名称-添加-新建文件夹(英文版请自行翻译),这里文件夹名以image为例,把需要的图片拖进来,当然你也可以不建,直接把图片拖到项目项目录下,但为了整洁,建议还是建一下。 2、选中刚刚拖进去的图片,看右下角的属性标签,如果没有,右键点图片,选属性。生成操作选Resource. 第二步,程序调用。

1

System.IO.Stream src = Application.GetResourceStream(new Uri("/PhoneApp4;component/image/a.png", UriKind.Relative)).Stream;

关键在Uri的格式,PhoneApp4是项目名称,component是固定路径,image/a.jpg才是图片资源相对路径,得到的是Stream,在微软官方的例子中,使用下面的方法来转换成图片:

1

2

3

4

            BitmapImage bi = new BitmapImage();

            bi.SetSource(src);

            Image img = new Image();

            img.Source = bi;

网上的文章基本上都没写第一步,我就卡在这里,添加图片还好说,但是属性的生成操作没设置,导致在使用的时候抛异常。

以上内容摘自wchao911

但是,后来我又发现一个可以实现相同功能的方法,只需要一步:

 只要将路径前的“/”去掉就可以了。

            StreamResourceInfo sri = null;

            Uri uri = new Uri("Images/Background.png", UriKind.RelativeOrAbsolute);//这里不能添加“/”在image前面,否者找不到资源。

            sri = Application.GetResourceStream(uri);//从应用程序包返回资源

            BitmapImage bmpimg = new BitmapImage();

            bmpimg.SetSource(sri.Stream);

            ed.SaveBackground(bmpimg);

 

你可能感兴趣的:(application)