关于Silverlight中的图片资源引用

关于Silverlight中的图片资源引用,第1张

概述原文地址:http://www.soaspx.com/dotnet/silverlight/silverlight_20101027_6174.html Silverlight里将图片引入大概有三个方法: 1.直接使用路径引入 比如说,什么资源都不引入,然而我需要在MainPage.xaml中使用一张图片。 假设TestSL.xap在xxx\Projects\TestSL\TestSL\Bin\R

原文地址:http://www.soaspx.com/dotnet/silverlight/silverlight_20101027_6174.html

Silverlight里将图片引入大概有三个方法:


1.直接使用路径引入
比如说,什么资源都不引入,然而我需要在MainPage.xaml中使用一张图片。

假设TestSL.xap在xxx\Projects\TestSL\TestSL\Bin\Release下,图片在xxx\Bin\Release\Images\中。

则此图片的路径可以设置为xxx\Bin\Release\Images\001.jpg

使用绝对路径能够绕过下文所说的默认回退机制


2.使用资源方式引入,设置为Resource


在添加现有项后,得到的jpg文件在解决方案资源管理器中和XAML文件同级。

 

 此时xap文件结构如下图所示

 

此时可以看到图片被复制到了xxx\Projects\TestSL\TestSL目录中。

将图片生成 *** 作设置为Resource格式,则在使用时需要用001.jpg作为路径。

此时用reflector反编译xap文件中的DLL,会发现图片已经被包含在其中了,而且调试时也能够在SL应用程序中看到显示出的图片。

而将路径改为/001.jpg再重新生成,则会发现虽然DLL中还有图片文件,但是已经显示不出来了。

 

这是因为不使用反斜杠/时,URI表明文件相对于调用它的XAML的位置,在reflector中我们发现001.jpg相对于调用它的MainPage.xaml处于同一层次,

所以我们能够使用001.jpg访问到图片

而使用反斜杠(前导斜杠)的URI则表明文件相对于xap包的位置,此时SL会先在xap包中搜索,再搜索服务器中.xap文件包所在目录,这就是SL中资源引用的默认回退机制。

此时我们使用/001.jpg,则SL会先在与TestSL8.dll和AppManifest.xaml同一层次的目录中搜索001.jpg,

此时必然找不到,然后会在..\Bin\Release\中搜索001.jpg仍然是找不到的,因此就无法显示出图片。

 


2.使用资源方式引入,设置为Content

 
此时xap文件结构如下图所示

 

 

此时我们引用001.jpg的路径写为/001.jpg即可显示出图片

因为如上文所说,使用反斜杠(前导斜杠)时,SL会先在xap包中搜索,即在与TestSL8.dll和AppManifest.xaml同一层次的目录中搜索001.jpg

此时能够找到001.jpg
而如果我们使用/001.jpg,则无法看到显示的图片

道理如上。

但如果我们把001.jpg放在xxx\Projects\TestSL\TestSL\Bin\Release(即xap文件所在目录)中,则又可以看到001.jpg显示出来了。

这又是为什么呢?

原来在不使用反斜杠(前导斜杠)的情况下,如果SL在相对于引用 XAML 的位置找不到文件,

它会自动使用默认回退机制返回服务器上搜索。所以我们又可以看到001.jpg被正确寻找到了。

 

(在微软的Silverlight文档中这样写:


绝对和相对 URISilverlight 支持绝对和相对 URI,并通过使用相对 URI 提供用于查找文件的回退机制。


绝对 URI 指定资源文件的确切位置,绕过回退机制。例如,"http://www.contoso.com/resources/ondemand.png"表示指定域中资源文件夹中的一个文件。如果资源文件所在的域不是应用程序包的宿主域,必须指定绝对 URI。


相对 URI 指定相对于应用程序根或引用 XAML 的资源文件位置。


相对于应用程序根的 URI具有前导斜杠的相对 URI 表示相对于应用程序根的位置,例如"/resources/image.png"。
应用程序根是应用程序包的根文件夹或服务器上应用程序包的位置。相对 URI 回退机制首先搜索应用程序包,然后搜索服务器。如果在前导斜杠后包括路径,则在这两个位置中搜索相同的文件夹层次结构。


如果您在代码中使用相对 URI,则引用 XAML 是您的代码 *** 作的 XAML。
如果引用 XAML 位于文件夹中,可以引用相对于该位置的其他文件夹中的文件。但是,不能在应用程序根上进行搜索,例如"../resources/image.png"。此 URI 搜索包含 XAML 的文件夹所在级别上的资源文件夹,假定该文件夹不是应用程序根。


如果从应用程序包加载引用 XAML 但是未找到引用的资源文件,则使用默认回退机制。应用程序包中引用 XAML 的路径用于在服务器上搜索。例如,考虑应用程序包中以下位置的 XAML 文件:/pages/xaml/MyPage.xaml。在这种情况下,回退机制将在服务器上的以下位置搜索"../resources/image.png":/pages/resources/image.png。 如果将引用 XAML 编译为程序集,则必须在该同一程序集中嵌入资源文件。在这种情况下,URI 回退机制由 ResourceManager 类提供。此回退机制使用语言和区域性设置来查找附属程序集中的资源文件。有关更多信息,请参见本地化基于 Silverlight 的应用程序。)

总结

以上是内存溢出为你收集整理的关于Silverlight中的图片资源引用全部内容,希望文章能够帮你解决关于Silverlight中的图片资源引用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1064055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存