Silverlight实例教程 - 理解Navigation导航框架Page类
2011-07-28 11:22 jv9 阅读(2566) 评论(11) 编辑 收藏 举报Page类,在Silverlight导航框架中主要功能是作为导航内容页载入到导航框架Frame类,从功能上来讲Page类是一个Silverlight UserControl, 而不同的是,Page类具备特定的导航属性和方法。 同样,从Asp.Net应用开发角度理解,Page类可以被看作为Master Page承载具体功能的子页面。
System.Object
System.Windows.DependencyObject
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.Control
System.Windows.Controls.UserControl
System.Windows.Controls.Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"
Title="首页"
Style="{StaticResource PageStyle}">
与UserControl页面不同的是<navigation:Page ..> </navigation:Page> .
值得注意的是,Silverlight导航框架Page类派生自UserControl,没有提供特定的事件,而该类继承了UserControl类事件。
从前文可知,在Silverlight导航框架中,Frame类功能是承载Page类,在整个导航过程中,两个类相互依存,而完整的导航进程事件运行顺序如下图:
虽然Silverlight导航框架Page类没有定义专属事件,但是该类提供了专属的属性和方法,以供开发人员在导航过程中,对Page页面进行控制。
Silverlight导航框架常用Page类属性:
属性 | 类型 | 描述 |
NavigationCacheMode | NavigationCacheMode | 该属性用于获取或设置一个值,改制指定当前导航页面是否开启导航缓存;该属性默认值为Disabled(表示不开启导航缓存),Enabled和Required属性值表示开启导航缓存,其不同的是Required不受CacheSize限制,每次导航时都重复利用缓存实例;而Enabled受制于CacheSize缓存尺寸,超过尺寸时则放弃缓存实例 |
NavigationContext | NavigationContext | 获取当前导航请求中的对象信息,该属性常被用于获取URI查询字符串值,实现导航框架传值 |
NavigationService | NavigationService | 获取当前导航框架导航服务实例,通过该属性可以获取当前页面导航请求,该属性将在后文详细讲解。 |
Title | String | 该属性用于获取或设置当前导航页面的名称 |
Silverlight导航框架常用Page类方法:
方法 | 描述 |
OnFragmentNavigation | 该方法在导航到页面上的片段时被调用 |
OnNavigatedFrom | 该方法在当前页面不再为导航框架中的活动页面时被调用 |
OnNavigatedTo | 该方法在当前页面成为导航框架中的活动页面时被调用 |
OnNavigatingFrom | 该方法在当前页面不再为导航框架中的活动页面前被调用 |
在Page类属性中,最常用的属性是NavigationService, 该属性主要提供页面导航入口点地址,简单的理解是该属性是为导航框架Page类页面提供框架内页面内部导航功能,从某一页面内导航到其他 页面或者当前页面的其他表示形式。NavigationService属性提供 一个同名对象类NavigationService,所以,学习NavigationService属性也就是学习NavigationService类的过程。
方法 | 描述 |
GoBack | 该方法用于导航当前页面后退到历史记录中上一页,如果后退导航时没有历史记录页面,则返回异常 |
GoForward | 该方法用于导航当前页面前进到历史记录中下一页,如果前进导航时没有历史记录页面,则返回异常 |
Navigate | 该方法用于导航到指定URI页面,该URI可以是导航映射相对地址,也可以是导航页面绝对地址 |
Refresh | 该方法用于重载当前导航页,该方法经常被用于自定义INavigationContentLoader |
StopLoading | 该方法用于停止所有导航异步进程,该方法常被用于停止正在下载载入的导航页面 |
另外,NavigationService类提供以下常用属性和事件:
方法 | 描述 |
GoBack | 该方法用于导航当前页面后退到历史记录中上一页,如果后退导航时没有历史记录页面,则返回异常 |
GoForward | 该方法用于导航当前页面前进到历史记录中下一页,如果前进导航时没有历史记录页面,则返回异常 |
Navigate | 该方法用于导航到指定URI页面,该URI可以是导航映射相对地址,也可以是导航页面绝对地址 |
Refresh | 该方法用于重载当前导航页,该方法经常被用于自定义INavigationContentLoader |
StopLoading | 该方法用于停止所有导航异步进程,该方法常被用于停止正在下载载入的导航页面 |
事件 | 描述 |
FragmentNavigation | 该事件在导航到内容片段时被激活 |
Navigated | 该事件在导航完成时被激活 |
Navigating | 该事件在导航开始时被激活 |
NavigationFailed | 该事件在导航抛出异常失败时被激活 |
NavigationStopped | 该事件在StopLoading方法被调用时,或者取消当前导航请求时被激活 |
而与上一篇介绍Frame类对比,会发现NavigationService类提供的属性,方法和事件和Frame类中的属性,方法和事件基本类似,其功能性也有重叠。从而可以这样理解,在Silverlight导航框架Page类中,允许在导航页面内触发页面导航行为,其效果与Frame类实现效果相同。
例如:
但是,两者也有不同之处,例如Frame类提供部分依赖属性,可供控件进行直接绑定和调用,例如IsEnabled, 通过该属性可以实现当前Frame是否可用。而NavigationService不能实现该绑定效果。
对于NavigationService类而言,其页面导航方法如上代码,值得注意的是该类包含两个特殊的方法,分别是Refresh()和StopLoading(), 这两个方法主要针对当前页面进行操作,其简单描述如下:
StopLoading方法,功能类似浏览器的停止按钮,该方法将停止正在运行的页面载入进程或者其他异步进程,在实际项目中,该方法并不常用。
mainFrame.Navigate(new Uri(uriText), UriKind.Relative);
在User.xaml页面将使用NavigationContext.QueryString获取userID和userRole参数值,以获取详细用户信息。
if (this.NavigationContext.QueryString.ContainsKey(“userID”))
userID = Int32.Parse(this.NavigationContext.QueryString[“userID”]);
if (this.NavigationContext.QueryString.ContainsKey(“userRole”))
userRole = Int32.Parse(this.NavigationContext.QueryString[“userRole”]);
NavigationCacheMode.Disabled: 不支持缓存页面,每次导航应用访问时创建 一个新的页面实例;
NavigationCacheMode.Required: 支持缓存页面,并且每次导航应用访问时都重复利用该缓存实例,而且忽略Frame类中CacheSize属性设置大小;
NavigationCacheMode.Enabled: 支持缓存页面,如果超过Frame类中CacheSize属性设置尺寸,则放弃保存缓存实例;
默认情况下,NavigationCacheMode为Disabled状态,也就是说,在Silverlight导航框架应用时,不记录任何信息到缓存。当NavigationCacheMode状态设置为Required后,每当用户结束一次导航操作,Frame类将保存页面对象到内存,当用户点击返回或者前进时,将重新载入保存的缓存状态到当前Page类页面,而当前Page类页面的构造函数不再执行,但是其Loaded事件将被激活。当NavigationCacheMode为Enabled状态时,则会参考Frame类中CacheSize属性设置尺寸设置。例如:如果设置Frame类CacheSize属性值为6,当第七个Page类页面载入时,第一个载入到缓存的Page类 页面将会从缓存中删除,而最新的Page类页面将会替代。
需要注意的是,当允许导航页面缓存时,位于内存中的导航页面具有完整的页面处理流程,也就是说,当前台页面重新刷新载入时,缓存中所有的页面Loaded事件都会同时执行,从而达到保存页面状态的目的,当用户需要访问上一级或下一级页面时,则会节省页面初始化事件,相对提高应用效率。
Silverlight导航框架Page类属于导航基础类之一,在随后的实例演示中,会经常用到其属性和方法,对于该类推荐认真学习。
今天暂时介绍到这里。下一篇将介绍Silverlight导航框架常用应用话题。
Silverlight实例教程系列 - Silverlight Validation验证实例
Silverlight实例教程系列 - Silverlight Out-of-Browser实例
Silverlight实例教程系列 - Expression Blend实例中文教程
欢迎大家加入“专注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人
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2010-07-28 Silverlight实例教程 - Out of Browser音乐播放器
2009-07-28 Silverlight多行文本框