技术开发 频道

在WPF中使用Window和Page功能创建向导

  【IT168 技术文档】传统的导航是基于URI字符串的。导航到指定的URI,系统就会加载并呈现关联的页。结构化的导航则与这种方式不同,是基于对象调用PageFunction。若需要导航,您要创建适当的页功能的对象,并导航到该对象。系统不是加载和生成指定的页,而是初始化页功能对象,这个对象会控制下一步发生的动作。

  在这个实验中,您将学习如何创建一个向导,这个向导用来将联系人添加到您的通讯簿里。您将使用Window和一些Page Functions,通过线性的拓扑结构,实现一个结构化的导航UI。

  系统自动利用导航历史(日志)来记录导航信息。要从当前的页功能对象返回到之前的页功能对象,您需要调用OnReturn这个方法。系统会把堆栈里之前的页功能对象返回给您。有了这个特性,您可以从应用程序的某个页面很容易地返回到之前的页面,也可以在页面之间传递数据。

  1. 我们的添加联系人向导AddContactWizard将由两个UI页面和一个调用页面组成。在向导结束后,数据会被返回给初始页面。首先要做的在MainWindow.xaml.cs里实现LaunchNewContactWizard这个事件处理函数,把AddContactWizard显示在屏幕的中间。

    ' Triggered when context menu or other toolbar option is
    ' clicked to launch
    ' "Create a new contact" dialog
    Sub LaunchNewContactWizard(ByVal sender As Object, _
                               ByVal e As RoutedEventArgs)
        
' for the Add Contact Wizard, lets start with a Navigation Window
        Dim addContactWizard As NavigationWindow = New NavigationWindow()
        addContactWizard.Title
= "Contact Information"
        addContactWizard.Width
= 500
        addContactWizard.Height
= 400
        addContactWizard.WindowStyle
= Windows.WindowStyle.ToolWindow
        addContactWizard.Name
= "AddContactWizard"

        
' point it to the initial page function with no UI
        ' this will call the subsequent page functions which have UI
        addContactWizard.Source = New Uri("UILessPageFunction.xaml", _
                                           UriKind.Relative)

        Application.Current.Properties(
"AddContactWizard") = addContactWizard
        addContactWizard.WindowStartupLocation
= _
                                   Windows.WindowStartupLocation.CenterScreen
        addContactWizard.ShowDialog()
    End Sub

   导航窗口的源设置为了UILessPageFunction.xaml,我们稍后会创建这个页面。我们在应用的属性包里引用了窗口对象,这样这个窗口对象可以在控制窗口功能的其它地方被使用。

  2. 接下来我们来定义初始页面。我们要使用PageFunction,但不会添加UI。在您的项目里,添加一个新的WPF Page Function,命名为UILessPageFunction.xaml。您可以通过Solution Explorer,右键点击项目,选择Add?New Item,在对话框中选择PageFunction(WPF)。

  TypeArgument指定的是调用页面会返回什么样的PageFunction。让我们修改标记语言,将类型参数设为Object。稍后我们会在代码文件中修改同样的类型参数。

<PageFunction
    
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys
="clr-namespace:System;assembly=mscorlib"
    x:Class
="UILessPageFunction"
    x:TypeArguments
="sys:Object"
    Title
="UILessPageFunction">
    
<Grid>

    
</Grid>
</PageFunction>

 

1
相关文章