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