2010年1月11日星期一

Silverlight 导航概述 1

本文摘自Silverlight3 SDK 导航概述

应用程序导航

在 Silverlight 应用程序中使用 Frame 和 Page 控件可以实现应用程序导航。页面(Page)控件表示内容的独立部分。框架(Frame)用作页面控件的容器,并使页导航非常简便。在任一时刻,框架只显示一个页面的内容。以编程方式或通过用户操作导航到新页时,框架中显示的页将会更改。
可以将 Silverlight 应用程序的根视觉效果设计为包含可导航内容和永久用户界面 (UI) 组件(例如页眉、页脚和导航边栏)的组合。使用"Silverlight 导航应用程序"模板创建新项目时,该模板会生成一个包含永久 UI 组件的 XAML 文件并为可导航内容生成一个框架。
下面的示例演示一个简单框架,它存在于名为 MainPage 的 UserControl 控件内。您可以在 ContentFrame 之前或之后向 LayoutRoot 添加其他 UI 组件。Source 设置为 /Views/Home.xaml 表示默认情况下,框架中显示的页是位于 /Views/Home.xaml 的页。在实际创建的应用程序中,Source被简单设置为/Home

通过使用"添加新项"对话框,然后选择"Silverlight 页",可以将新页添加到应用程序中。Visual Studio 中的"Silverlight 导航应用程序"模板会创建一个名为 Views 的文件夹,其中包含这些页。您可以向此文件夹添加页,也可以在应用程序中最适当的任何位置添加页。

创建用户友好的 URI

在框架中,可以为特定页面指定某种 URI 模式映射。使用 URI 映射可以创建说明用户操作的 URI,而不是文件的路径。例如,可以指定对 /Home 的任何请求实际上是对位于 /Views/Home.xaml 的文件的请求。不与任何已定义模式匹配的所有请求都作为常规 URI 请求来处理,不会映射到其他页。下表演示 URI 映射定义的示例以及如何解析这些示例请求。

URI 映射定义: Uri = "/Home" MappedUri = "/Views/Home.xaml"
匹配 URI 示例 : /Home 解析后的 URI : /Views/Home.xaml
URI 映射定义: Uri = "/{page}" MappedUri = "/Views/{page}Page.xaml"
匹配 URI 示例 : /About 解析后的 URI : /Views/AboutPage.xaml
URI 映射定义: Uri = "/Product/{category}" MappedUri = "/ContosoShop/Product.xaml?category={category}"
匹配 URI 示例 : /Product/bikes 解析后的 URI : /ContosoShop/Product.xaml?category=bikes
URI 映射定义: Uri = "/{reporttype}/{month}/{format}"
(在 XAML 中)MappedUri = "/Views/Reports/{reporttype}.xaml?time={month}&show={format}"
(在 Visual Basic 或 C# 中)MappedUri = "/Views/Reports/{reporttype}.xaml?time={month}&show={format}"
匹配 URI 示例 : /Sales/June/Short
解析后的 URI : /Views/Reports/Sales.xaml?time=June&show=Short

向框架添加 URI 映射的方法是定义 UriMapper 类(或派生自 UriMapperBase 类的自定义类)的一个实例以及任意数量的 UriMapping 实例。您指定的模式不必是与所请求 URI 完全匹配的 URI。该模式可以在 URI 中包含占位符段,URI 将匹配该段中的任何值。将占位符段的名称括在大括号({ 和 })中可以指定占位符段。在映射 URI 时,占位符段充当变量。任何没有括在大括号中的值表示文本值,要与模式匹配的 URI 必须存在该值。下面的示例演示包含占位符值的 URI 模式。















URI 请求将映射为与该请求匹配的第一个模式。因此,应按照从最具体到最一般的顺序添加 URI 映射实例。例如,下面的定义是按照从具体文本值到一般占位符值正确排序的。对 /SalesReport 的请求将映射为 /Views/Reports/Sales.xaml















但是,如果颠倒 URI 映射定义的顺序,对 /SalesReport 的请求将不会映射为 /Views/Reports/Sales.xaml。相反,第一个定义 /{page} 将匹配每一个段请求,包括 /SalesReport。该请求将映射为 /Views/SalesReportPage.xaml。

方便页导航

Frame 类提供用于页导航的方法和属性。将 Source 属性设置为要显示的页的 URI,或调用 Navigate 方法并将该页的 URI 作为参数来传递。也可以使用 GoBack 和 GoForward 方法在导航历史记录中向前或向后导航。
可以使用 HyperlinkButton 控件使用户能够在应用程序的各页中导航。宿主框架将导航到请求的页。下面的示例演示一个包含了导航到应用程序中另一页的 HyperlinkButton 的页。








没有评论:

发表评论