科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Avalon应用程序中的导航技术分析

Avalon应用程序中的导航技术分析

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将介绍Avalon应用程序的导航特性

作者:陶刚编译 来源:天极网 2007年11月4日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
在Page2.xaml中,根元素是<PageFunction>,它并不在上述的四种页面类型之中。<PageFunction>是PageFunction页面的通用版本,你需要用x:TypeArguments属性(在例子中被设置为“String”)来指定它的类型。如果你希望把该页面转换为上述四种类型中的任意一个(例如StringPageFunction),可以简单地改变根元素,如下所示(请注意,x:TypeArguments属性被删除了):

<StringPageFunction x:Class="Page2"
 xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
 xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"

<Grid>

</Grid>
</StringPageFunction>

  但是我现在还是使用原始的<PageFunction>根元素。

  用下面的内容填充Page1.xaml:

<Page x:Class="Page1"
xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"

<StackPanel>

<Button Click="ButtonClick"
HorizontalAlignment="Left"
Margin="10,5,10,5"
Width="120">Go to Page 2
</Button>

<TextBlock Margin="10,5,10,5">
 <Inline Name="txtResult"></Inline>
</TextBlock>

</StackPanel>
</Page>

  基本上,这个页面包含一个用于载入Page2.xaml的按钮控件(图5所示)和一个用于显示Page2.xaml返回值的TextBlock控件(请注意第一次载入的时候TextBlock控件不可见,因为它没有包含任何值)。


图5:Page1.xaml。按钮控件载入应用程序的第二个页面。

  在Page1.xaml的后台代码——Page1.xaml.vb中加入的下面的内容:

Partial Public Class Page1
Inherits Page
Private WithEvents p2 As Page2

Private Sub ButtonClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)

 Dim myApp As NavigationApplication
 Dim navWindow As NavigationWindow

 myApp = CType(System.Windows.Application.Current, NavigationApplication)
 navWindow = CType(myApp.MainWindow, NavigationWindow)

 p2 = New Page2
 p2.InitializeComponent()
 navWindow.Navigate(p2)
End Sub

Private Sub return_handler(ByVal sender As Object, _
ByVal e As ReturnEventArgs(Of String)) _
Handles p2.Return
 txtResult.Text = "Returned: " & e.Result.ToString
End Sub

End Class

  在Page1.xaml.vb中,我添加了两个方法:

  ·ButtonClick——处理按钮控件点击事件。

  ·return_handler——检索Page2.xaml返回的结果。

  如果要导航到某个PageFunction页面,你必须建立目标页面的实例,调用它的InitializeComponent()方法,接着使用Navigate()方法导航到该页面。当目标页面函数返回值的时候,你从该页面的Return(返回)事件中捕获数据。返回的值可以通过ReturnEventArgs参数检索到。

  现在我们填充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"

<StackPanel HorizontalAlignment="Left">
<TextBlock Margin="10,5,10,5">
What is your name?</TextBlock>
<TextBox Name="txtName" Margin="10,5,10,5"
Width="200"></TextBox>
<Button Click="ButtonClick" Margin="10,5,10,5"
Width="60"
HorizontalAlignment="Left">Done</Button>
</StackPanel>
</PageFunction>

  Page2.xaml将显示一个文本字符串,后面跟着一个文本框控件和按钮控件(图6所示)。它的目的是提示用户输入名字,接着把这个名字传递回Page1.xaml。


图6:Page2.xaml。应用程序的第二个页面将要求用户输入,内容会被传递回Page1.xaml。

  Page2.xaml.vb后台的代码如下:

Partial Public Class Page2
Inherits PageFunction(Of String)

Private Sub ButtonClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
 OnFinish(New ReturnEventArgs(Of String)(txtName.Text))
End Sub
End Class

  请注意,Page2类继承自PageFunction类(在XAML页面中匹配了相应的<PageFunction>元素);你也可以指定普通类型(例子中是String)。

  当我们点击Done(完成)按钮的时候,就使用OnFinish()方法返回输入的名字。OnFinish()方法把指定的字符串返回给调用页面(图7所示)。


图7:应用程序流程。从页面1到页面2,然后返回,这个过程得到一个名字。

  在这个应用程序中,导航按钮的工作方式与浏览器中的导航按钮的工作方式相似,可以让你向前和向后访问页面(图8所示)。图8中的“untitled”指向Page2.xaml。


图8:前进和后退。你可以查看应用程序中页面导航的历史。

  所有载入过的页面都会自动地存储在一个堆栈数据结构(就是journal,导航日志)中。在某些情况下,你可能不希望在导航日志中记录某些页面(例如,为了防止用户不小心导航到了某个作为事务部分的页面,从而破坏了应用程序的流程)。如果要手动从导航日志中删除某个页面,就把它的RemoveFromJournal属性设置为“true”:

' Page2.xaml
Private Sub ButtonClick(ByVal sender As Object, _
ByVal e As RoutedEventArgs)
Me.RemoveFromJournal = True
 OnFinish(New ReturnEventArgs(Of String)(txtName.Text))
End Sub

  这样操作以后,Page2.xaml就不会显示在导航按钮中了(图9所示)。


图9:此处没有后退。你可以从导航日志中删掉一个页面。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章