吹完了頁面有關的話題,今天我們來聊一下頁面之間是如何導航的,在更多情況下,我們的應用程式不會只有一個頁面的,應該會有N個,就像我們做案頭應 用開發那樣,我們一個應用程式中可能不止一個表單(極簡單的程式除外),我們要處理表單之間的切換;同理地,在進行Web開發的時候,我們的Web應用程式可能也不止一個頁面,我們要處理頁面之間的切換。當然了,在我們的手機應用中,同樣需要這種操作,我們稱之為“導航”,作為開發人員,我們全盤操控頁面之間的切換,所以說,我們也當了App的“總舵主”。
一、如何進行導航。進行頁面導航的一種簡單方法就是使用HyperlinkButton控制項的NavigateUri屬性來指定要導航的目標頁面的XAML檔案的URI,下面通過一個簡單的例子來試試吧。
建立一個WP應用項目,在首頁面中放一個HyperlinkButton控制項,把NavigateUri的值設為 /pageSecond.xaml,接著建立一個頁面,命名為pageSecond.xaml。
[html] view plaincopyprint?
- <HyperlinkButton Content="跳到頁面二" Height="78" HorizontalAlignment="Left" Margin="126,86,0,0" Name="hyperlinkButton1" VerticalAlignment="Top" Width="216" FontSize="32" FontStyle="Normal" FontStretch="Normal"
- NavigateUri="/pageSecond.xaml"/>
第二種導航方法是通過代碼方式實現,如按鈕的單擊事件。
[csharp] view plaincopyprint?
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- this.NavigationService.Navigate(new Uri("/pageSecond.xaml", UriKind.Relative));
- }
二、OnNavigatedFrom 方法和OnNavigatedTo 方法。1、當使用者即將離開當前頁時,將調用OnNavigatedFrom 方法;2、當使用者從其它頁面導航到該頁面時調用OnNavigatedTo 方法。 相信大家多寫一些代碼測試一下,這個就很好理解了。A、在首頁面中添加以下代碼。
[csharp] view plaincopyprint?
- // 離開首頁面
- protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
- {
- base.OnNavigatedFrom(e);
-
- System.Diagnostics.Debug.WriteLine("***** 已離開首頁面。");
- }
B、在第二個頁面中添加以下代碼。
[csharp] view plaincopyprint?
- // 導航到第二個頁面
- protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
- {
- base.OnNavigatedTo(e);
-
- System.Diagnostics.Debug.WriteLine("***** Hi,已經來到第二個頁面了。");
- }
然後,你運行程式導航一下,看看“輸出”視窗裡面有什嗎?
三、如何在頁面間傳遞參數。
在安卓開發中,從一個Activity到另外一個Activity,需要Intent對象傳遞內容,不過,在WP開發中,我們只需要像WEB頁面那樣在URI在附加上參數即可。
如:/Numbb.xaml?pt1=aaaa&pt2=ccccc。
現在,我們把剛才的例子改一下,在首頁面上隨便放一個TextBox,我們要把這個頁面中輸入的內容傳遞到第二個頁面中。
[csharp] view plaincopyprint?
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- this.NavigationService.Navigate(new Uri("/pageSecond.xaml?str=" + textBox1.Text, UriKind.Relative));
- }
在第二個頁面中取出資料。在第二個頁面中取出資料。
[csharp] view plaincopyprint?
- // 導航到第二個頁面
- protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
- {
- base.OnNavigatedTo(e);
-
- // 傳遞的參數叫什麼名字,這裡就按什麼名字來取。
- string pv = this.NavigationContext.QueryString["str"];
- this.textBlock1.Text = pv;
- }