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

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

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-11

    應(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è)面。

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

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