用户使用微软的新Avalon UI框架组件和XAML(它是用于建立Avalon应用程序的语言)可以建立不同类型的应用程序。本文将介绍Avalon应用程序的导航特性。(请注意,从一开始起,微软就赋予Avalon一个永久的名称:Windows显示框架。在本文中,我们提及的WPF就是指Avalon)。
WPF应用程序可以被分成两种类型:
·独立的Windows应用程序
·包含一系列页面的应用程序
后一种类型(用户在一系列页面中导航)更加普遍。这种类型的应用程序中的导航元素是由Hyperlink(超链接)控件提供。但是Hyperlink控件也有一些缺点,例如向目标页面传递值困难、确定目标页面什么时候返回到调用页面的能力有限、给调用页面传递值也很困难。
因此,在本文中我将演示如何来处理这些问题;我将建立一个WPF应用程序,它从一个页面导航到另一个页面,在页面之间传递值。
导航的基础知识 在深入讲解WPF中的页面导航理论之前,我首先编写一个简单的应用程序,解释一些关键特性。首先,使用Visual Studio 2005建立一个新的WPF项目(我使用的是VB.NET),把这个应用程序命名为AvalonNavigation(图1所示)。
 图1:在Visual Studio 2005中建立一个新的WPF应用程序 |
解决方案管理器如图2所示:
 图2:解决方案管理器中的内容。你可以看到建立的新项目。 |
首先我查看项目中的MyApp.xaml文件。Avalon导航应用程序从<NavigationApplication> 根元素开始。StartupUri属性指定了应用程序执行时载入的页面;在例子中,启动页面是Page1.xaml:
<NavigationApplication x:Class="MyApp" xmlns="http://schemas.microsoft.com/winfx/avalon/2005" xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005" StartupUri="Page1.xaml" > <NavigationApplication.Resources> </NavigationApplication.Resources> </NavigationApplication> Page1.xaml的内容如下所示: <Page x:Class="Page1" xmlns="http://schemas.microsoft.com/winfx/avalon/2005" xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005" > <Grid>
</Grid> </Page> |
现在给项目添加一个Avalon PageFunction项:右键点击解决方案管理器中的项目名称,然后选择“添加新项…”,并选择Avalon PageFunction模板。把页面的名称改成Page2.xaml并点击“添加”(图3所示)。
 图3:分页。给项目添加一个新的Avalon PageFunction项 |
Page2.xaml被加入项目之后,双击它来查看其内容:
<PageFunction x:Class="Page2" x:TypeArguments="String" xmlns="http://schemas.microsoft.com/winfx/avalon/2005" xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005" > <Grid>
</Grid> </PageFunction> |
Avalon PageFunction是一个基本的WPF页面,只是它会给调用页面返回结果(因此称为页面函数)。图4显示了如何在Page1.xaml中使用Page2.xaml并获取Page2.xaml返回的结果。
 图4:A到B。现在你可以从Page1.xaml导航到Page2.xaml。 |
PageFunction页面有四种类型:
·BooleanPageFunction——返回一个布尔型的值;<BooleanPageFunction>元素描述它。
·Int32PageFunction——返回一个整型的值;<Int32PageFunction>元素描述它。
·ObjectPageFunction——返回一个对象值;<ObjectPageFunction>元素描述它。
·StringPageFunction——返回一个字符串;<StringPageFunction>元素描述它。