C# 在頁(yè)面之間導(dǎo)航
應(yīng)用程序內(nèi)部頁(yè)面之間的導(dǎo)航類似于Web應(yīng)用程序的導(dǎo)航方式??梢哉{(diào)用Navigate方法從一個(gè)頁(yè)面導(dǎo)航到另一個(gè)頁(yè)面,調(diào)用Back方法可以返回。下面的示例演示了如何使用三種基本頁(yè)而在應(yīng)用程序的頁(yè)面之間移動(dòng)。
試一試 導(dǎo)航:Ch25Ex04
(1)在 Visual Studio中選擇 Blank App(Universa丨 Windows),創(chuàng)建一個(gè)新項(xiàng)目,命名為 BasicNavigation。
(2)選擇并刪除MainPage.xaml文件。
(3)右擊該項(xiàng)目,然后選擇Add|New item-使用Blank Page模板添加一個(gè)新頁(yè)面,命名為BlankPagel。
(4)重復(fù)步驟(3)兩次,項(xiàng)目就有了三個(gè)頁(yè)面,分別命名為BlankPage2和BlankPage3。
(5)打開(kāi)App.xaml.cs代碼隱藏文件,定位OnLaunched方法。該方法使用剛才刪除的MainPage,所以把引用改為BlankPagel。
(6)在BlankPagel上,給網(wǎng)格插入一個(gè)堆桟面板、一個(gè)TextBlock和三個(gè)按鈕:
<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)打開(kāi)第二頁(yè)(BlankPage2),添加一個(gè)類似的堆棧面板:
<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)把導(dǎo)航添加到事件處理程序中:
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)打開(kāi)第三頁(yè),添加另一個(gè)堆棧面板,其中包括一個(gè)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)運(yùn)行應(yīng)用程序。該應(yīng)用程序顯示有三個(gè)按鈕的首頁(yè)。
示例說(shuō)明
運(yùn)行應(yīng)用程序時(shí),它顯示了一個(gè)加載時(shí)的閃屏,接著顯示第一個(gè)頁(yè)面。第一次單擊一個(gè)按鈕時(shí),使用想瀏 覽的頁(yè)面類型調(diào)用Navigate方法:
Frame.Navigate(typeof(BlankPage2));
它沒(méi)有顯示在這個(gè)例子中,但Navigate方法包括一個(gè)重載版本,允許把參數(shù)發(fā)送給要導(dǎo)航到的頁(yè)面上。在頁(yè)面之間導(dǎo)航時(shí),請(qǐng)注意,如果使用一個(gè)按鈕返回第一頁(yè),Back按鈕仍然是活動(dòng)的。
在每個(gè)頁(yè)面上,使用GoBack事件的實(shí)現(xiàn)代碼回到上一頁(yè)。調(diào)用GoBack方法之前,會(huì)檢查CanGoBack屬性。否則,在顯示的第一頁(yè)上調(diào)用GoBack時(shí),會(huì)得到一個(gè)異常。
if (Frame.CanGoBack) this.Frame.GoBack();
每次導(dǎo)航到一個(gè)頁(yè)面,都會(huì)創(chuàng)建一個(gè)新實(shí)例。為了改變這一行為,可以在頁(yè)面的構(gòu)造函數(shù)中啟用屬性NavigationCacheMode,例如:
public BasicPagel()
{
this.InitializeComponent();
NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;
}
這會(huì)緩存頁(yè)面。
點(diǎn)擊加載更多評(píng)論>>