文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Silverlight中资源引用的一点心得记录

Silverlight中资源引用的一点心得记录

时间:2010-10-25  来源:Singularity

 

因为刚学SL,对资源的使用一直搞不太清。昨天因为一个程序的图片老显示不出,
问了一位精通.NET的前辈才大概的理解了。

 

接下来的文章中我是以本机调试Silverlight Application做例子的

 

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


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

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

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

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


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

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

 

  • ..\Bin\Release\TESTSL.xap
    •  
      •  
        •  
          •  
            • AppManifest.xaml
            • TestSL8.dll
              •  
                •  
                  • 001.jpg
                  • mainpage.xaml
                  • app.xaml  

 

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

此时可以看到图片被复制到了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文件结构如下图所示

 

  • ..\Bin\Release\TESTSL.XAP
    •  
      •  
        •  
          •  
            • AppManifest.xaml
            • TestSL8.dll
            • 001.jpg


此时我们引用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 的应用程序。)

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载