• Silverlight实例教程 理解Navigation导航框架Page类


    在“Silverlight实例教程 - 理解Navigation导航框架Frame类” 介绍了Silverlight Navigation框架主要对象之一,Frame类,该类可以被简单的理解为Silverlight Navigation页面承载框架,框架中提供丰富的属性,方法和事件,从而实现Navigation框架功能。本篇将继续介绍Silverlight Navigation框架另外一个重要对象,Page类。


    Page类,在Silverlight导航框架中主要功能是作为导航内容页载入到导航框架Frame类,从功能上来讲Page类是一个Silverlight UserControl, 而不同的是,Page类具备特定的导航属性和方法。 同样,从Asp.Net应用开发角度理解,Page类可以被看作为Master Page承载具体功能的子页面。 

    从Silverlight SDK中可以看出,Page类继承System.Windows.Controls.UserControl,也就是说Page类是一个用户控件类,可被任何ContentControl内容控件类(Frame类)承载显示。

    System.Object

       System.Windows.DependencyObject

         System.Windows.UIElement

           System.Windows.FrameworkElement

             System.Windows.Controls.Control

                System.Windows.Controls.UserControl

                    System.Windows.Controls.Page


    虽然Page类页面派生自UserControl,但是作为独立页面类,其具有特殊的页面命名空间,其页面初始化XAML代码如下:
    <navigation:Page x:Class="SilverlightNavigationDemo.Home"
        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(表示不开启导航缓存),EnabledRequired属性值表示开启导航缓存,其不同的是Required不受CacheSize限制,每次导航时都重复利用缓存实例;而Enabled受制于CacheSize缓存尺寸,超过尺寸时则放弃缓存实例

    NavigationContext

    NavigationContext

    获取当前导航请求中的对象信息,该属性常被用于获取URI查询字符串值,实现导航框架传值

    NavigationService

    NavigationService

    获取当前导航框架导航服务实例,通过该属性可以获取当前页面导航请求,该属性将在后文详细讲解。

    Title

    String

    该属性用于获取或设置当前导航页面的名称


    Silverlight导航框架常用Page类方法

    方法

    描述

    OnFragmentNavigation

    该方法在导航到页面上的片段时被调用

    OnNavigatedFrom

    该方法在当前页面不再为导航框架中的活动页面时被调用

    OnNavigatedTo

    该方法在当前页面成为导航框架中的活动页面时被调用

    OnNavigatingFrom

    该方法在当前页面不再为导航框架中的活动页面前被调用


    Page类的NavigationService属性

    在Page类属性中,最常用的属性是NavigationService, 该属性主要提供页面导航入口点地址,简单的理解是该属性是为导航框架Page类页面提供框架内页面内部导航功能,从某一页面内导航到其他 页面或者当前页面的其他表示形式。NavigationService属性提供 一个同名对象类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类实现效果相同。

    例如:

    this.NavigationService.Navigate(new Uri(“/Home.xaml”, UriKind.Relative));

    但是,两者也有不同之处,例如Frame类提供部分依赖属性,可供控件进行直接绑定和调用,例如IsEnabled, 通过该属性可以实现当前Frame是否可用。而NavigationService不能实现该绑定效果。

    对于NavigationService类而言,其页面导航方法如上代码,值得注意的是该类包含两个特殊的方法,分别是Refresh()和StopLoading(), 这两个方法主要针对当前页面进行操作,其简单描述如下:

    Refresh方法,功能类似浏览器的刷新按钮,该方法将重载当前Page类页面,实现页面刷新效果,如果页面允许支持缓存,将从缓存中读取当前页面。
    StopLoading方法,功能类似浏览器的停止按钮,该方法将停止正在运行的页面载入进程或者其他异步进程,在实际项目中,该方法并不常用。


    Page类的NavigationContext属性

    Page类提供的另外一个重要属性是NavigationContext属性,该属性提供一个NavigationContext对象,而该对象中包含两个常用属性分别是Uri和QueryString。在实际项目中,经常会使用NavigationContext.Uri获取当前URI路径字符串,使用NavigationContext.QueryString获取导航页面传值。 例如:
    string uriText = String.Format(“/User.xaml?userID={0}&role={1}”, userID, userRole);
    mainFrame.Navigate(
    new Uri(uriText), UriKind.Relative);


    执行以上代码,当前导航框架将访问如下地址: /User.xaml?userID=6&role=1

    在User.xaml页面将使用NavigationContext.QueryString获取userID和userRole参数值,以获取详细用户信息。

    int 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”]);


    Page类的NavigationCacheMode属性

    Page类的NavigationCacheMode属性是Silverlight导航框架重要属性之一,其功能可以保存导航页面状态。NavigationCacheMode属性中包含有三个枚举成员,分别是Disabled,Required和Enabled,其含义分别是:

    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人


  • 相关阅读:
    Linux——端口命令
    Linux——iptables 禁止 IP和端口
    CE第9关共用
    获得程序窗体标题-FindWindowW需要的参数
    mysql ODBC win10 设置
    Work
    Pet
    Is It A Tree?
    Ice_cream's world I
    小希的迷宫
  • 原文地址:https://www.cnblogs.com/jv9/p/2119065.html
Copyright © 2020-2023  润新知