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