这个问题也困扰了我很久.经常在Project里包含一些图片,然后在应用里指定路径,结果就是Load不上,遇到ImageError的错误。
这里列出一些常用的设置Image 相对路径的几种方法:
假设我有这样一个solution,包括: MyImagelibrary,其中包含一个文件夹"Images\MyImage1.png"; MyLoadImage是我的Silverlight Application里面也有一个Images\MyImage2.png,页面中有一Image控件来分别显示这两个图片
那么有如下几种选择:
Build Action="Resource",copy To OutPut Directory = "Do not copy".
这时如果需要用另一个项目中的Image,那么需要这样设置Image路径
xaml: <Image Source="/MyImagelibrary;component/Images/MyImage1.png" />
code: myImage.source = new BitmAPImage(new Uri("/MyImagelibrary;component/Images/MyImage1.png",UriKind.relative));
这个Uri有如下3部分:
/MyImagelibrary 是Image所在的Assembly的名字,前面的"/"是必须的。 ";component/"是Assembly名字和在此Assembly下具体路径之间的分隔符,必须要有。 "Images/MyImage1.png" 就是所在Assembly中的路径啦。此时图片是作为资源被嵌入进Assembly的. 如果用Reflector 打开MyImagelibrary.dll,就能够找到这个资源:
这是Image在另一个assembly的时候的用法,如果在同一个项目下,那就可以直接这样用:
<Image Source="Images/MyImage2.png"/>
2. Build Action = "Content",copy To OutPut Directory = "Do not copy".
这种情况,如果图片在另一个Project中,那是没有办法获得的。只有在同一个Project中的时候,才能够被找到,因为这种设置会把Image嵌入.xap中.如果打开生成的xap,会看到如下
:
可以看到只有同一个Project中的Image作为Content嵌入到xap中。
这时的用法就是
3.Build Action = "None",copy To OutPut Directory = "copy Always".
如果不希望图片被压进Xap文件,而是用户调用的时候再动态Load,那可以用这种方法。这种方法图片会被复制到 xap所在路径下,路径依然是 Images\MyImage1.png,Images\MyImage2.png.
使用方法如前<Image Source="Images/MyImage1.png" /> 或<Image Source="Images/MyImage2.png"/>
遇到图片加载错误时,应该先检查选用的是那种方法,然后再检查图片是否被正确放在所期望的地方,dll/xap/路径 中。
其他常见的原因还包括:用绝对路径的时候要注意是否是Cross-scheme,比如如果你的项目要从加载位于 http://www.mydomain.com/Myimage.png的图片,但是如果你DeBUG是在浏览器中打开的是file://C:/MyProject/..那就属于是cross-scheme (file vs. http),这时会有S@R_404_4722@错误产生,解决方法就是用一个ASP.net website 作为起始工程,然后加入Silverlight 工程。
本文来自Xun的博客,原文地址:http://blogs.msdn.com/b/xusun/archive/2008/12/31/silverlight.aspx
总结以上是内存溢出为你收集整理的Silverlight图片相对路径的设置全部内容,希望文章能够帮你解决Silverlight图片相对路径的设置所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)