电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

在Silverlight中访问外部xap文件中UserControlVIP免费

在Silverlight中访问外部xap文件中UserControl_第1页
1/7
在Silverlight中访问外部xap文件中UserControl_第2页
2/7
在Silverlight中访问外部xap文件中UserControl_第3页
3/7
在Silverlight中访问外部xap文件中UserControl概述众所周知,在Silverlight2开始每个项目编译后都会打包成为一个xap文件,如果我们要访问当前xap文件中的UserControl比较容易,那我们如何访问一个外部xap文件中的内容呢?甚至于如何访问一个互联网上的xap文件呢?本文将简单介绍一下在Silverlight中如何访问外部xap文件。需求现在我们先来看一下需求,大致是这样子的,在服务端我们有两个xap文件,其中MainProject.xap文件将会在MainProjectTestPage.aspx中引用,而ExternalProject.xap文件中的UserControl将会在MainProject.xap文件中访问,并进行显示,如下图所示:现在我们来建立相关的项目,最终完成的项目结构如下图所示:这样在编译后,将会在ClientBin文件夹下产生两个.xap文件,现在我们将在MainProject.xap文件中访问ExternalProject.xap中的UserControl。分析在实现这个过程中,我们将会遇到两个问题:1.因为没有任何页面引用ExternalProject.xap文件,所以它不会下载到客户端,这一点我们可以通过编码的方式来下载它。2.访问ExternalProject.xap中的UserControl,我们需要找到对应的程序集,以便使用反射,我们知道在xap文件是一个标准的zip文件,它会包含相关的程序集(接下来我会写一篇文章专门解释xap文件),如下图所示:现在解决了xap文件的下载已经程序集的访问问题,我们可以着手来实现了。实现实现的过程也是相当简单,首先我们使用WebClient去下载xap文件,相信大家都知道该怎么做了,如下代码所示voidmyButton_Click(objectsender,RoutedEventArgse){Uriaddress=newUri("http://localhost:4161/ClientBin/ExternalProject.xap");WebClientwebClient=newWebClient();webClient.OpenReadCompleted+=newOpenReadCompletedEventHandler(webClient_OpenReadCompleted);webClient.OpenReadAsync(address);}voidwebClient_OpenReadCompleted(objectsender,OpenReadCompletedEventArgse){//得到下载结果}这一步比较简单,接下来我们将根据下载的结果,得到相应的程序集。我们知道在xap文件中的AppManifest.xaml文件相当于一个清单,列出了当前xap文件用到的程序集,它的内容如下所示:注意,在Deployment.Parts节点下包含了当前应用程序中所有的程序集。首先要根据下载的结果获取AppManifest.xaml文件中的内容,如下代码所示:Streamstream=Application.GetResourceStream(newStreamResourceInfo(packageStream,null),newUri("AppManifest.xaml",UriKind.Relative)).Stream;StringappManifestString=newStreamReader(stream).ReadToEnd();有了AppManifest.xaml中内容,就可以根据它来构造一个Deployment对象,Deployment对象提供了当前应用程序的Part和本地化信息清单,它的定义如下所示:注意它定义了一个很重要的属性Parts,通过该属性我们就可以访问所有Deployment中的程序集。好了,现在我们看如何通过AppManifest.xaml中的内容构造Deployment对象,以及遍历其中的程序集,如下代码所示:Deploymentdeployment=(Deployment)XamlReader.Load(appManifestString);Assemblyassembly=null;foreach(AssemblyPartassemblyPartindeployment.Parts){if(assemblyPart.Source==assemblyName){Stringsource=assemblyPart.Source;StreamResourceInfostreamInfo=Application.GetResourceStream(newStreamResourceInfo(packageStream,"application/binary"),newUri(source,UriKind.Relative));assembly=assemblyPart.Load(streamInfo.Stream);break;}}returnassembly;注意,在遍历时如果我们找到程序集名等于我们想要访问的程序集,则直接返回该程序集。最终完整的LoadAssemblyFromXap方法代码如下:AssemblyLoadAs...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

在Silverlight中访问外部xap文件中UserControl

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部