🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
![](https://box.kancloud.cn/2016-03-18_56eb67c868925.jpg) 在Web或者Windows传统应用项目中,导航功能是基础功能之一,其目的是将用户目标和应用业务目标协调综合起来,从而帮助用户能够快捷的浏览信息和获取服务。一个友好的导航功能不仅仅能够提高用户的阅读效率,而且还能反映其项目品牌形象以及影响其品牌可信度。在Silverlight中,导航框架(Navigation Framework)是Silverlight核心框架之一,其功能与传统Web和Windows应用导航功能类似。在随后的几篇文章中,详细学习Silverlight导航框架的原理和实例应用,希望通过这套系列教程,帮助Silverlight开发人员理解和掌握Silverlight Navigation Framework。 **Silverlight导航框架概述** 在传统导航功能中,经常会出现以下几个技术特征: 1.   能够记录浏览历史信息;当用户点击某个链接后,跳转到下一个功能页面,而导航功能能够记录访问浏览过的信息链接,通过“前进”或“后退“按钮能够轻松的返回到上一个访问页面; 2. 支持通过URL进行传参,特别是在Web应用项目中,在导航过程中,使用URL进行传递参数是最常用的功能;例如:从浏览用户信息页面,跳转到编辑用户信息页面,可以通过URL传递用户ID到编辑页面,是其能够通过该ID读取到数据库中指定用户信息; 在Silverlight 3之前的版本,Silverlight没有特定的导航框架,项目中页面之间的切换是通过修改RootVisual布局容器的内容而实现的。在后文将详细介绍早期页面导航的方法和步骤。 ~~~ private void Application_Startup(object sender, StartupEventArgs e) {     this.RootVisual = new MainPage(); } ~~~ 在Silverlight 3版本中, 微软推出Navigation Framework导航框架,同时推出Silverlight Navigation应用模板,帮助开发人员创建Silverlight导航应用。 在导航框架中,不仅实现了传统导航功能,而且加入了许多独特的新特性。例如,地址映射,浏览器集成导航等。为了加大Navigation Framework的灵活性,在Silverlight 4中,增加新的属性和接口允许开发人员创建扩展导航功能。在随后的几篇中,我们将详细讲解这些导航功能应用和实例。 **Silverlight导航框架应用方案** ![](https://box.kancloud.cn/2016-03-18_56eb67cf1ae3a.png) 1.    **应用项目内部导航**; Silverlight项目内部导航是导航框架主要功能之一,导航框架提供Frame和Page控件类控制Silverlight项目页面承载以及页面导航切换功能。其中Frame类如同一个页面容器控件,用于协助导航页面的切换和显示;而Page类用于承载具体内容页面。 2.    **应用项目外部导航**; 应用项目外部导航是指导航框架支持应用程序外部资源的直接访问链接。 Silverlight导航框架支持开发人员通过EnableNavigation属性设置是否允许外部导航功能,同时支持HyperlinkButton控件导航页面到应用外部资源。例如: <HyperlinkButton NavigateUri="http://www.silverlight.net" Content="访问Silverlight官方网站" TargetName="_new" /> ![](https://box.kancloud.cn/2016-03-18_56eb67cf341c4.png) 3.    **Web浏览器集成导航**; Silverlight是基于Web浏览器的富应用插件,对于其页面导航切换,可以被集成到浏览器导航功能中。通过设置Silverlight导航框架JournalOwnership属性可以指定是否将当前应用与Web浏览器导航相集成,而在默认情况下,JournalOwership属性值为Automatic,表示当前框架为顶级框架时,将于浏览器导航集成在一起;而当属性值设置为OwnsJournal时,则表示禁止浏览器集成导航功能,当前应用导航框架内部保留导航日志。 ![](https://box.kancloud.cn/2016-03-18_56eb67cf42fb6.png) 值得注意的是,Web浏览器集成导航功能和浏览器版本相互关联,在Internet Explorer 7之前的版本,如果需要浏览器支持集成导航功能,需要在Silverlight承载页面中添加一个名为“_sl_historyFrame”的iFrame框架,该框架将记录应用浏览记录。从Internet Explorer 8开始以及随后的版本,在不需要该框架支持的情况下,也可以记录应用浏览记录。这是因为在Internet Explorer 7之前的版本无法对当前Javascript API中location.hash对象进行更新,在hash标签没有更新的情况下,浏览器会默认处于当前位置,不会生成浏览历史记录,Internet Explorer 8之后的版本已经不存在这个问题。 4.    **应用扩展导航系统**; 虽然Silverlight导航框架提供强大的应用内部,外部以及浏览器集成导航功能,但是在实际项目中,仍旧存在不灵活的弊端。为了使Silverlight导航框架更加灵活多变,在Silverlight 4中,导航框架提供一个新的属性和接口ContentLoader和INavigationContentLoader,允许开发人员创建应用扩展导航功能。 在随后的章节中将对以上功能详细讲解和演示。在Silverlight 5中导航功能没有较多的更新,只是在其原有基础上对其性能进行了优化,下图为导航框架在Silverlight各版本中的特点更新: ![](https://box.kancloud.cn/2016-03-18_56eb67cf5868f.png) **Silverlight导航框架优势** Silverlight导航框架优势可总结如下: 1.    简洁API接口,降低使用复杂度,减少开发工作量,同时方便开发人员日常维护; 2.    导航框架能够记录历史浏览信息,通过浏览器“前进”或“后退”按钮,可以轻松访问上一次访问的页面; 3.    能够支持URL传参功能,特别是在Web应用项目中,在导航过程中,使用URL进行传递参数是最常用的功能;例如:从浏览用户信息页面,跳转到编辑用户信息页面,可以通过URL传递用户ID到编辑页面,是其能够通过该ID读取到数据库中指定用户信息; 4.    支持深度链接(Deep Link),可通过链接访问不同页面状态下的应用; 曾经有开发人员询问过,什么是Deep Link?这里给出简单的解释: 深度链接(Deep Link)是指项目中一个特定页面或者资源的超级链接地址,该链接保存某特定的状态,可被直接定位访问。例如:[http://www.silverlight.net/index.html](http://www.silverlight.net/index.html)是主页链接,而http://www.Silverlight.net/contact.html则是该网站的一个深度链接,通过该地址可以直接定位到联系页面;或者http://www.silverlight.net/image/logo.gif,该图片资源的地址同样是一个深度链接。在后文,将详细演示和介绍Deep Link的应用。 更多Silverlight实例教程系列: [Silverlight实例教程系列 - Silverlight Validation验证实例](http://silverlightchina.net/html/zhuantixilie/getstart/2010/0924/2035.html) [Silverlight实例教程系列 - Silverlight Out-of-Browser实例](http://silverlightchina.net/html/zhuantixilie/getstart/2010/0809/1709.html) [Silverlight实例教程系列 - Expression Blend实例中文教程](http://silverlightchina.net/html/zhuantixilie/getstart/2010/0409/978.html) 欢迎大家加入“专注Silverlight”QQ技术群,欢迎大家加入一起学习讨论Silverlight&WPF&Widnows Phone开发技术。  22308706(一群) 超级群500人  37891947(二群) 超级群500人  100844510(三群) 高级群200人  32679922(四群) 超级群500人  23413513(五群) 高级群200人  32679955(六群) 超级群500人  61267622(七群) 超级群500人  88585140(八群) 超级群500人  128043302(九群 企业应用开发推荐群) 高级群200人  101364438(十群) 超级群500人  68435160(十一群 企业应用开发推荐群)超级群500人