Windows8中是沒有對話方塊的概念的,不同的介面有不同的頁面,類似於網頁一樣的瀏覽模式。
通過Frame.Navigate(typeof(TestPage),obj)的方式來實現不同頁面的導航。
NavigationServer的屬性方法有:
GoBack()後退,GoForward()前進,CanGoBack()判斷是否可以後退。
頁面導航預設是不啟用緩衝的,也就是後退之後的前一個頁面恢複成原始的狀態。
如果需要開啟,在建構函式中可以使用以下代碼:
NavigationCacheMode = NavigationCacheMode.Enabled;
下面建立一個項目TestNavigation來說明導覽列的使用。
給項目添加兩個空白頁面MainPage1和MainPage2和MainPage3來進行測試:
在App.xaml.cs將啟動版面設定為MainPage1(找到typeof,將MainPage改成MainPage1即可)。
在MainPage1添加一個按鈕來跳轉到Page3。
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Button Content="Go to Page3" HorizontalAlignment="Left" Margin="200,100,0,0" VerticalAlignment="Top"/> </Grid>
雙擊該按鈕,設定點擊之後的方法:
private void Button_Click_1(object sender, RoutedEventArgs e) { Frame.Navigate(typeof(MainPage3)); }
這樣運行項目,點擊之後便會發現自動跳轉到了對應的介面。
接下來,在MainPage3的頁面上加一個後退按鈕:
<Button Content="Back" HorizontalAlignment="Left" VerticalAlignment="Top"/>
雙擊該按鈕如下添加代碼:
private void Button_Click_1(object sender, RoutedEventArgs e) { Frame.GoBack(); }
運行項目,則點擊該按鈕可以後退。
如此便實現了兩個頁面的導航,而這個Frame是Page類的一個屬性。
那麼怎麼給頁面傳參呢?
其實Navigate方法還有一個重載方法:
public bool Navigate(Type sourcePageType); public bool Navigate(Type sourcePageType, object parameter);
也就是說第二個參數傳什麼都可以,是一個object對象。
那麼我們下面來做一個測試。
首先是在MainPage1.xaml添加兩個按鈕,都是跳轉到MainPage3但是傳的參數不一樣:
<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>
頁面效果
雙擊第一個按鈕,將其中代碼改成:
private void Button_Click_1(object sender, RoutedEventArgs e) { Frame.Navigate(typeof(MainPage3),"請叫我汪海"); }
雙擊第二個按鈕,將其中代碼改成:
private void Button_Click_2(object sender, RoutedEventArgs e) { Frame.Navigate(typeof(MainPage3), "請還是叫我汪海"); }
這樣我們就給Page3傳了不同的參數。
那麼接下來我們在Page3的OnNavigatedTo接受相應的資料。
先把返回的按鈕賦值Name="btn",然後我們把接受到的資料顯示在btn上面:
protected override void OnNavigatedTo(NavigationEventArgs e) { //e.Parameter代表傳來的參數 btn.Content = e.Parameter; }
此時運行項目,就可以看見跳轉後的頁面顯示傳參的內容了:
下面來看一下如何使用導覽列的緩衝功能。
在Page1上放置兩個文字框和一個按鈕來改變第二個文字框的值:
<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>
雙擊按鈕添加方法:
private void Button_Click_3(object sender, RoutedEventArgs e) { text2.Text = "Hello,why!"; }
運行項目,點擊按鈕,發現文字框的內容改成了Hello,why!但是如果跳轉到Page3再返回就會發現原本的內容又不見了。
如果想保留裡面的內容,就要啟用緩衝。
在構造方法中添加以下代碼:
public MainPage1() { this.InitializeComponent(); NavigationCacheMode = NavigationCacheMode.Enabled; }
這樣就可以保留相關的資訊了。
接下來再看一看導航模式。
OnNavigatedTo在剛進來或者從其他頁面裡面返回過來的時候都可以調用。
一共有Back,Forward,New,Refresh四種情況,一般在New的時候才重新載入資料:
protected override void OnNavigatedTo(NavigationEventArgs e) { if (e.NavigationMode == NavigationMode.New) { //第一次進入這個頁面,此時才載入資料。 } }
還有兩個方法:
1.OnNavigatedFrom:當頁面不再是活動頁面時調用,
2.OnNavigatingFrom:在頁面即將不是活動頁面的。