Silverlight实例教程 - Navigation导航框架URI映射机制

 


 

 

上几篇Silverlight Navigation导航框架教程中,主要介绍了Silverlight Navigation导航框架基础,本篇开始将结合实例介绍Silverlight Navigation导航框架的应用。按照个人经验来讲,学习Silverlight Navigation导航框架应用,首先需要了解导航框架对URI地址映射原理,所以,本篇将介绍Navigation导航框架URI映射机制。

快速理解URI映射机制概念
对于熟悉ASP.NET MVC路由机制的开发人员来讲,ASP.NET MVC URL路由机制并不陌生。而Silverlight导航框架URI映射机制的概念和ASP.NET MVC URL路由机制相类似,使用指定格式的URI表示原始URI信息,并生成映射关系,在项目运行时,Silverlight导航框架URI映射类将解析预先定义的URI变量,向其对应URI映射发出请求,以达到页面跳转或参数传递的目的。
从原理上讲,向Silverlight导航框架Frame类添加URI映射是定义UriMapper类的一个或者多个UriMapping实例的过程。而UriMapper类主要的功能是根据映射对象集合中指定的匹配对象规则,将统一资源标识符(URI)转换为新的URI,将请求的URI映射到不同的URI中。需要注意的是URI映射是将URI指向一个字符串类型变量,而不是实际的文件路径。
在定义映射规则时,不需要使用完全匹配的URI,可以包含占位符号作为替换标识。

 

为了方便演示本篇实例,将使用“Silverlight实例教程 - 理解Navigation导航框架Frame类”文章中的源代码项目作为演示项目。

 

Navigation框架URI映射的使用
在实际项目中,使用Silverlight导航框架URI映射功能前需要在App.xaml资源文件中添加一个UriMapper对象作为XAML资源,在资源文件中,将声明所有需要URI映射的变量。最基本的代码格式如下:

< Application   
  
x:Class ="SilverlightNavigationDemo.App"
  xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:uriMapper
="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation" >

  
< Application.Resources >
      
    
< uriMapper:UriMapper  x:Name ="PageMapper" >
        
< uriMapper:UriMapping  Uri ="/Home"  MappedUri ="/Views/Home.xaml" />
        
< uriMapper:UriMapping  Uri ="/{pageName}"  MappedUri ="/Views/{pageName}.xaml" />
    
</ uriMapper:UriMapper >
      
  
</ Application.Resources >
</ Application >

 

在UriMapper对象中,添加UriMapping对象,该对象将当前Navigation框架传递的URI进行映射转换,指向项目目录中真实页面路径。 


在本实例中,使用<uriMapper:UriMapping Uri="/Home" MappedUri="/Views/Home.xaml"/>定义简单导航框架URI映射规则,其含义是使用URI = “/Home”,匹配解析到 /Views/Home.xaml页面,下图中,URI在地址栏中,仅显示/Home,而实际文件指向则是/Views/Home.xaml。 该映射规则是Navigation导航框架中最简单的页面映射。


 

导航框架通用映射符号

 

而UriMapper对象除了支持以上标准映射格式外,同时也支持占位符号作为通用映射符号,实现页面映射功能,其中占位符号名称作为变量的形式可以被匹配该段中的任何值替换。

其语法表示方式是:  {占位字段名}

例如: <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>

该映射规则使用{pageName}作为通用映射占位符号,通过Navigation导航框架解析后,将指向/Views/{pageName}.xaml页面。如果将{pageName}替换为Home,该规则将于第一条映射规则相同,如下:

 

<uriMapper:UriMapping Uri="/Home" MappedUri="/Views/Home.xaml"/>


完成地址映射机制设置后,需要对当前项目的Navigation导航框架Frame类UriMapper属性进行赋值,将该属性关联至App.xaml资源文件中的UriMapper类,其赋值方法如下:

 

< navigation:Frame  x:Name ="ContentFrame"  Style =" {StaticResource ContentFrameStyle} "  UriMapper =" {StaticResource PageMapper} "  Navigated ="ContentFrame_Navigated"  NavigationFailed ="ContentFrame_NavigationFailed" >
</ navigation:Frame >

 


 

导航框架映射机制传递参数

通过Silverlight Navigation导航框架机制,可以实现页面间参数传递功能。例如,在项目Home页面输入一个参数值,传递到About页面中,其映射规则如下:

 

 

< uriMapper:UriMapping  Uri ="/About/{parameter}"  MappedUri ="/Views/About.xaml?parameter={parameter}" />

 

 

在Navigation导航框架运行时, 解析URI传递参数,指向到"/Views/About.xaml?parameter=Hello%20Silverlight",通过对NavigationContext的调用,About页面即可获得传递的参数值。(对于Silverlight Navigation传参,将在下一篇详细介绍)


 

 

 

 

URI映射机制优点
使用Silverlight导航框架URI映射机制不仅可以提供友好的URI访问格式,同时也可以用于隐藏项目页面名称,从而保护项目内部结构的作用。
需要注意的一点,Silverlight导航框架URI映射机制变量解析具有一定顺序性,URI请求响应顺序是由具体映射路径到通用映射路径。

 

例如,简单修改以上映射机制规则的顺序如下:

 

< uriMapper:UriMapper  x:Name ="PageMapper" >
       
< uriMapper:UriMapping  Uri ="/{pageName}"  MappedUri ="/Views/{pageName}.xaml" />
       
< uriMapper:UriMapping  Uri ="/Home"  MappedUri ="/Views/Home.xaml" />
        
< uriMapper:UriMapping  Uri ="/About/{parameter}"  MappedUri ="/Views/About.xaml?parameter={parameter}" />
</ uriMapper:UriMapper >

 

在 Silverlight导航框架执行时, 如果试图传递参数到About页面,则会弹出异常信息,提示无法找到/About/Hello Silverlight页面。 这是因为在UriMapper对象中,首先定义{pageName}的映射地址,在发出/About页面请求时,导航框架映射机制将首先匹配 {pageName},如果匹配成功,也就不再继续向下面的规则查询匹配。而<uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>和

<uriMapper:UriMapping Uri="/About/{parameter}" MappedUri="/Views/About.xaml?parameter={parameter}"/>相比较而言,更加具有通用性,所以正确顺序应该是从局部到全局的方向,才能够正确映射URI页面。

 



Silverlight Navigation框架URI映射机制技巧提示

 

导航框架Uri映射路径允许设置为空值,设置空值时可以创建一个初始化页面,在第一次运行时映射将指向该初始化页面,同时也可以防止在Uri映射出现空值时返回异常。 例如,修改Home页面URI映射规则如下:

 

 

< uriMapper:UriMapping  Uri =""  MappedUri ="/Views/Home.xaml" />

 

 

每次运行项目,Home页面都会作为默认首页载入。

 

在不使用Uri空值映射时,建议在Frame.NavigationFrailed事件中控制导航框架异常处理。例如,当用户重复使用导航后退功能,直到导航第一个页面时为用户设置提示信息,避免出现异常操作。

 

Silverlight Navigation导航框架URI映射机制就讲到这里,下一篇,将通过导航框架传参功能,理解URI映射机制的应用。

 

本篇源代码

 

 

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人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值