文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Silverlight中导航框架与动态加载的原理是什么

2023-06-17 21:23

关注

今天就跟大家聊聊有关Silverlight中导航框架与动态加载的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. Silverlight 3 的导航框架简介

Silverlight 提供了内置的导航框架,可以比较轻松的在 Silverlight Page 之间进行切换,并且可以和浏览器的前进、后退按钮集成,下面的代码可以简单的说明其用法:

Silverlight中导航框架与动态加载的原理是什么

这段代码很简单,通过设置 HyperLinkButton 的 NavigationUri 和 TargetName 两个属性,可以让指定的 Frame 去加载指定的 Silverlight Page 。

2. 常见的动态加载解决方案

当 Silverlight 项目比较大的时候, 很自然的会想到将 Silverlight 项目拆分成多个 xap 文件,进行按需加载,这个实现起来也不难。通常的做法是使用 WebClient 或者 HttpWebRequest ,向服务端请求所需的 xap 文件,然后通过 xap 压缩包内的 AppManifest.xaml 文件,获取到 xap 文件内部打包的 dll 文件信息,在客户端通过反射进行加载。

3. 导航框架与动态加载相结合时遇到的问题,原因与解决方法

如果将这两者结合起来,利用 Sliverlight 内置的导航框架来加载动态加载的 xap 文件内部的 Silverlight Page ,对应用程序的开发和用户体验都是有很大帮助的:对开发方面来说,不用反射加载,而是使用 Silverlight 内置的导航框架,可以节省很多代码;对用户体验方面,按需加载能减少初始加载文件的大小,减少等待时间,使用导航框架可以和浏览器的前进、后退按钮紧密集成,用户体验更佳。

但是,在 Silverlight 3 目前的版本中, Frame 控件似乎不能直接加载动态加载的 Silverlight Page , 不管是通过设置 HyperLinkButton 的 NavigateUri 属性,还是通过调用 Frame.Navigate(Uri source) 方法,都会出现相同的异常, 看下面代码:

var xap = "http://localhost:2704/AppSL.Web/ClientBin/TestSLApp.xap";  // LoadPackage 是加载 xap 的扩展方法  Deployment.Current.LoadPackage(xap, () => {     var uri = new Uri("/TestSLApp;component/MainPage.xaml", UriKind.Relative);     this.WidgetFrame.Navigate(uri);  });

当执行至 WidgetFrame.Navigate(uri) 时,会出现下面的异常:

Silverlight中导航框架与动态加载的原理是什么

是什么原因导致这个异常呢? 通过 Reflector 察看 PageResourceContentLoader ,发现加载 x:Class 的是这个 GetTypeFromAnyLoadedAssembly 方法:

 

这个方法只是遍历 Deployment.Current.Part 去寻找所需要的类型,并没有去遍历动态加载的文件, 当然,这里也不可能去遍历。

看到这里,终于找到异常出现的原因了,由于这个方法是私有并且是静态的,无法进行重写,只能通过其它途径来解决。我想到的解决方法是,新建一个 Silverlight Page, 然后删除对应的代码文件,删除 xaml 视图的 x:Code 信息,如下图所示:

Silverlight中导航框架与动态加载的原理是什么

***的解决方案就是, 要做一个引导的文件,这个文件必须是一个独立的 xaml 文件,没有代码文件,没有 x:Class 信息,这样就不会被编译成新的类型,自然可以被 Silverlight 的导航框架加载了。

看完上述内容,你们对Silverlight中导航框架与动态加载的原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯