生活随笔
收集整理的這篇文章主要介紹了
页面导航的基础与深入
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Windows8中是沒有對話框的概念的,不同的界面有不同的頁面,類似于網頁一樣的瀏覽模式。
通過Frame.Navigate(typeof(TestPage),obj)的方式來實現不同頁面的導航。
NavigationServer的屬性方法有:
GoBack()后退,GoForward()前進,CanGoBack()判斷是否可以后退。
頁面導航默認是不啟用緩存的,也就是后退之后的前一個頁面恢復成原始的狀態。
如果需要開啟,在構造函數中可以使用以下代碼:
[csharp] view plaincopy
NavigationCacheMode?=?NavigationCacheMode.Enabled;??
下面新建一個項目TestNavigation來說明導航欄的使用。
給項目添加兩個空白頁面MainPage1和MainPage2和MainPage3來進行測試:
在App.xaml.cs將啟動頁面設置為MainPage1(找到typeof,將MainPage改成MainPage1即可)。
在MainPage1添加一個按鈕來跳轉到Page3。
[html] view plaincopy
<Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">??????<Button?Content="Go?to?Page3"?HorizontalAlignment="Left"?Margin="200,100,0,0"???????????????VerticalAlignment="Top"/>????</Grid>??
雙擊該按鈕,設置點擊之后的方法:
[csharp] view plaincopy
private?void?Button_Click_1(object?sender,?RoutedEventArgs?e)??????????{??????????????Frame.Navigate(typeof(MainPage3));??????????}??
這樣運行項目,點擊之后便會發現自動跳轉到了對應的界面。
接下來,在MainPage3的頁面上加一個后退按鈕:
[html] view plaincopy
<Button?Content="Back"?HorizontalAlignment="Left"?VerticalAlignment="Top"/>??
雙擊該按鈕如下添加代碼:
[csharp] view plaincopy
private?void?Button_Click_1(object?sender,?RoutedEventArgs?e)??????????{??????????????Frame.GoBack();??????????}??
運行項目,則點擊該按鈕可以后退。
如此便實現了兩個頁面的導航,而這個Frame是Page類的一個屬性。
那么怎么給頁面傳參呢?
其實Navigate方法還有一個重載方法:
[csharp] view plaincopy
public?bool?Navigate(Type?sourcePageType);??public?bool?Navigate(Type?sourcePageType,?object?parameter);??
也就是說第二個參數傳什么都可以,是一個object對象。
那么我們下面來做一個測試。
首先是在MainPage1.xaml添加兩個按鈕,都是跳轉到MainPage3但是傳的參數不一樣:
[html] view plaincopy
<Grid?Background="{StaticResource?ApplicationPageBackgroundThemeBrush}">?????????<Button?Content="Go?to?Page3-1"?HorizontalAlignment="Left"?Margin="200,100,0,0"??????????????????VerticalAlignment="Top"?Click="Button_Click_1"/>?????????<Button?Content="Go?to?Page3-2"?HorizontalAlignment="Left"?Margin="200,200,0,0"??????????????????VerticalAlignment="Top"?Click="Button_Click_2"/>?????</Grid>??
頁面效果如圖:
雙擊第一個按鈕,將其中代碼改成:
[csharp] view plaincopy
private?void?Button_Click_1(object?sender,?RoutedEventArgs?e)??????????{??????????????Frame.Navigate(typeof(MainPage3),"請叫我汪海");??????????}??
雙擊第二個按鈕,將其中代碼改成:
[csharp] view plaincopy
private?void?Button_Click_2(object?sender,?RoutedEventArgs?e)??????????{??????????????Frame.Navigate(typeof(MainPage3),?"請還是叫我汪海");??????????}??
這樣我們就給Page3傳了不同的參數。
那么接下來我們在Page3的OnNavigatedTo接受相應的數據。
先把返回的按鈕賦值Name="btn",然后我們把接受到的數據顯示在btn上面:
[csharp] view plaincopy
protected?override?void?OnNavigatedTo(NavigationEventArgs?e)?????????{??????????????????????????btn.Content?=?e.Parameter;?????????}??
此時運行項目,就可以看見跳轉后的頁面顯示傳參的內容了:
下面來看一下如何使用導航欄的緩存功能。
在Page1上放置兩個文本框和一個按鈕來改變第二個文本框的值:
[html] view plaincopy
<TextBox?HorizontalAlignment="Center"?VerticalAlignment="Center"?Margin="-800,0,0,0"?TextWrapping="Wrap"?????????????????Text=""?/>??????????<TextBox?x:Name="text2"?HorizontalAlignment="Center"?VerticalAlignment="Center"?Margin="-800,100,0,0"?TextWrapping="Wrap"?????????????????Text="TextBox"?/>????????<Button?HorizontalAlignment="Center"?Content="Change!"?VerticalAlignment="Center"?Margin="-800,200,0,0"></Button>??
雙擊按鈕添加方法:
[csharp] view plaincopy
private?void?Button_Click_3(object?sender,?RoutedEventArgs?e)??????????{??????????????text2.Text?=?"Hello,why!";??????????}??
運行項目,點擊按鈕,發現文本框的內容改成了Hello,why!但是如果跳轉到Page3再返回就會發現原本的內容又不見了。
如果想保留里面的內容,就要啟用緩存。
在構造方法中添加以下代碼:
[csharp] view plaincopy
public?MainPage1()??????????{??????????????this.InitializeComponent();??????????????NavigationCacheMode?=?NavigationCacheMode.Enabled;??????????}??
這樣就可以保留相關的信息了。
接下來再看一看導航模式。
OnNavigatedTo在剛進來或者從其他頁面里面返回過來的時候都可以調用。
一共有Back,Forward,New,Refresh四種情況,一般在New的時候才重新加載數據:
[csharp] view plaincopy
protected?override?void?OnNavigatedTo(NavigationEventArgs?e)?????????{?????????????if?(e.NavigationMode?==?NavigationMode.New)?????????????{????????????????????????????????}?????????}??
還有兩個方法:
1.OnNavigatedFrom:當頁面不再是活動頁面時調用,
2.OnNavigatingFrom:在頁面即將不是活動頁面的。
總結
以上是生活随笔為你收集整理的页面导航的基础与深入的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。