Windows 8 应用的页面导航(2)

Frame和Page类

在为应用程序添加更多的函数之前,需要了解添加过的页面如何为应用程序提供导航支持。Frame类主要用来相应导航,或者执行一些类似Navigate, GoBack, 和 GoForward的方法。使用Navigate方法使内容显示在框架中。在先前的例子中App.OnLaunched方法创建一个Frame并将BasicPage1传递给Navigate方法。然后这个方法设定应用程序当前窗口的内容为Frame。应用程序窗口包含Frame,而Frame又包含BasicPage1。

BasicPage1 是Page类的非直接子类,Page类有一个Frame属性,一个可以获得包含Page的read-only(只读)属性。当HyperlinkButton的Click事件处理器调用Frame.Navigate(typeof(BasicPage2))时,应用程序窗口的Frame会显示BasicPage2的内容。

11.1.3 页面模板对导航的支持

当创建导航页面时,使用Basic page 模板,这种或者其他支持导航的模板创建了页面,这页面的右上角提供一个Back按钮,这个按钮只有可用时才可见。这个按钮的IsEnabled属性绑定到Frame.CanGoBack属性上,这就是为什么在第一个页面上看不到Back按钮,而在第二个页面才可以看到。

Basic Page模板创建的类可以继承LayoutAwarePage类,这个LayoutAwarePage类添加到项目中的Common/LayoutAwarePage.cs文件中,LayoutAwarePage类定义了GoBack 和GoHome方法。Back按钮援引LayoutAwarePage.GoBack方法,而Home按钮调用LayoutAwarePage.GoHome方法。

下面的Page模板提供相同的导航支持:

q Basic page

q Group Detail page

q Grouped Items page

q Item Detail page

q Items page

q Split page

11.1.4 页面间传递信息

前面的应用程序只是在两个页面进行导航,但是通常应用程序会有多个页面,而且页面与页面也需要共享信息,可以将第一个页面的某些信息传递到第二个页面中。

在BasicPage1.xaml页面中用下面的代码替换之前添加的StackPanel。

<StackPanel Grid.Row="1"

Margin="120,0,120,60">

<TextBlock Text="Enter your name"/>

<TextBox Width="200" HorizontalAlignment="Left" Name="tb1"/>

<HyperlinkButton Content="Click to go to page 2" Click="HyperlinkButton_Click_1"/>

</StackPanel>

在BasicPage1.xaml.cs中用下面的代码替换HyperlinkButton_Click_1事件处理器。

private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e)

{

this.Frame.Navigate(typeof(BasicPage2), tb1.Text);

}

在BasicPage2.xaml.cs中用下面的代码替换空的OnNavigatedTo方法。

protected override void OnNavigatedTo(NavigationEventArgs e)

{

string name = e.Parameter as string;

if (!string.IsNullOrWhiteSpace(name))

{

tb1.Text = "Hello, " + name;

}

else

{

tb1.Text = "Name is required. Go back and enter a name.";

}

}

运行应用程序,在Text Box属于名称,然后单击链接Click to go to page 2。当BasicPage2页面加载时调用rame.Navigate (typeof(BasicPage2), tb1.Text),在HypelikButten的Click事件中的tb1.Text属性被传递。然后BlankPage2的OnNavigated方法获得NavigationEventArgs.Parameter属性值,进而用来显示一条信息。

原文地址:https://www.cnblogs.com/finehappy/p/2858210.html