C# 在页面之间导航
应用程序内部页面之间的导航类似于Web应用程序的导航方式。可以调用Navigate方法从一个页面导航到另一个页面,调用Back方法可以返回。下面的示例演示了如何使用三种基本页而在应用程序的页面之间移动。
试一试 导航:Ch25Ex04
(1)在 Visual Studio中选择 Blank App(Universa丨 Windows),创建一个新项目,命名为 BasicNavigation。
(2)选择并删除MainPage.xaml文件。
(3)右击该项目,然后选择Add|New item-使用Blank Page模板添加一个新页面,命名为BlankPagel。
(4)重复步骤(3)两次,项目就有了三个页面,分别命名为BlankPage2和BlankPage3。
(5)打开App.xaml.cs代码隐藏文件,定位OnLaunched方法。该方法使用刚才删除的MainPage,所以把引用改为BlankPagel。
(6)在BlankPagel上,给网格插入一个堆桟面板、一个TextBlock和三个按钮:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBlock x:Name="textBlockCaption" Text="Page 1" HorizontalAlignment="Center"
Margin="10" VerticalAlignment="Top"/>
<StackPanel Orientation="Horizontal" Grid.Row="l" HorizontalAlignment="Center">
<Button Content="Page 2" Click="buttonGoto2_Click" />
<Button Content="Page 3" Click="buttonGoto3_Click" />
<Button Content="Back" Click="buttonGoBack_Click" />
</StackPanel>
</Grid>
(7)添加单击事件的事件处理程序,如下:
private void buttonGoto2_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPage2));
}
private void buttonGoto3_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate{typeof(BlankPage3));
}
private void buttonGoBack_Click(object sender, RoutedEventArgs e)
{
if (Frame.CanGoBack) this.Frame.GoBack{);
}
(8)打开第二页(BlankPage2),添加一个类似的堆栈面板:
<TextBlock x:Name="textBlockCaption" Text="Page 2" HorizontalAlignmentsUCenter"
Margin="10" VerticalAlignment="Top"/>
<StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
<Button Content="Page l" Click="buttonGotol-Click1’ />
<Button Content="Page 3" Click="buttonGoto3_Click” />
<Button Content="Back" Click="buttonGoBack_Click" />
</StackPanel>
(9)把导航添加到事件处理程序中:
private void buttonGotol_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPagel));
}
private void buttonGoto3_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPage3));
}
private void buttonGoBack一Click(object sender, RoutedEventArgs e)
{
if (Frame.CanGoBack) this.Frame.GoBack();
}
00)打开第三页,添加另一个堆栈面板,其中包括一个Home按钮:
<TextBlock x:Name="textBlockCaption" Text="Page 3" HorizontalAlignment="Center"
Margin="10" VerticalAlignment=MTopM/>
<StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
<Button Content="Page 1" Click="buttonGoto1_Click" />
<Button Content="Page 2" Click="buttonGoto2_Click" />
<Button Content="Back" Click="buttonGoBack_Click" />
</StackPanel> ""
(11)添加事件处理程序:
private void buttonGotol_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPagel));
}
private void buttonGoto2__Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPage2));
}
private void buttonGoBack_Click(object sender, RoutedEventArgs e)
{
if (Frame.CanGoBack) this.Frame.GoBack();
}
(12)运行应用程序。该应用程序显示有三个按钮的首页。
示例说明
运行应用程序时,它显示了一个加载时的闪屏,接着显示第一个页面。第一次单击一个按钮时,使用想浏 览的页面类型调用Navigate方法:
Frame.Navigate(typeof(BlankPage2));
它没有显示在这个例子中,但Navigate方法包括一个重载版本,允许把参数发送给要导航到的页面上。在页面之间导航时,请注意,如果使用一个按钮返回第一页,Back按钮仍然是活动的。
在每个页面上,使用GoBack事件的实现代码回到上一页。调用GoBack方法之前,会检查CanGoBack属性。否则,在显示的第一页上调用GoBack时,会得到一个异常。
if (Frame.CanGoBack) this.Frame.GoBack();
每次导航到一个页面,都会创建一个新实例。为了改变这一行为,可以在页面的构造函数中启用属性NavigationCacheMode,例如:
public BasicPagel()
{
this.InitializeComponent();
NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
}
这会缓存页面。
点击加载更多评论>>