位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 在頁面之間導(dǎo)航

提問人:劉團圓發(fā)布時間:2020-12-11

    應(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;

}

這會緩存頁面。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部