1. 程式人生 > >Windows Phone開發(7):當好總舵主

Windows Phone開發(7):當好總舵主

發的 content 數據 new 窗口 sdn 內容 str 剛才

吹完了頁面有關的話題,今天我們來聊一下頁面之間是如何導航的,在更多情況下,我們的應用程序不會只有一個頁面的,應該會有N個,就像我們做桌面應 用開發那樣,我們一個應用程序中可能不止一個窗體(極簡單的程序除外),我們要處理窗體之間的切換;同理地,在進行Web開發的時候,我們的Web應用程序可能也不止一個頁面,我們要處理頁面之間的切換。當然了,在我們的手機應用中,同樣需要這種操作,我們稱之為“導航”,作為開發者,我們全盤操控頁面之間的切換,所以說,我們也當了App的“總舵主”。

一、如何進行導航。 進行頁面導航的一種簡單方法就是使用HyperlinkButton控件的NavigateUri屬性來指定要導航的目標頁面的XAML文件的URI,下面通過一個簡單的例子來試試吧。

新建一個WP應用項目,在主頁面中放一個HyperlinkButton控件,把NavigateUri的值設為 /pageSecond.xaml,接著新建一個頁面,命名為pageSecond.xaml。

  1. <HyperlinkButton Content="跳到頁面二" Height="78" HorizontalAlignment="Left" Margin="126,86,0,0" Name="hyperlinkButton1" VerticalAlignment="Top" Width="216" FontSize="32" FontStyle="Normal" FontStretch="Normal"
  2. NavigateUri="/pageSecond.xaml"/>


技術分享

第二種導航方法是通過代碼方式實現,如按鈕的單擊事件。

  1. private void button1_Click(object sender, RoutedEventArgs e)
  2. {
  3. this.NavigationService.Navigate(new Uri("/pageSecond.xaml", UriKind.Relative));
  4. }

二、OnNavigatedFrom 方法和OnNavigatedTo 方法。 1、當用戶即將離開當前頁時,將調用OnNavigatedFrom 方法; 2、當用戶從其它頁面導航到該頁面時調用OnNavigatedTo 方法。 相信大家多寫一些代碼測試一下,這個就很好理解了。 A、在主頁面中添加以下代碼。
  1. // 離開主頁面
  2. protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
  3. {
  4. base.OnNavigatedFrom(e);
  5. System.Diagnostics.Debug.WriteLine("***** 已離開主頁面。");
  6. }


B、在第二個頁面中添加以下代碼。

  1. // 導航到第二個頁面
  2. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
  3. {
  4. base.OnNavigatedTo(e);
  5. System.Diagnostics.Debug.WriteLine("***** Hi,已經來到第二個頁面了。");
  6. }

然後,你運行程序導航一下,看看“輸出”窗口裏面有什麽?

技術分享

三、如何在頁面間傳遞參數。

在安卓開發中,從一個Activity到另外一個Activity,需要Intent對象傳遞內容,不過,在WP開發中,我們只需要像WEB頁面那樣在URI在附加上參數即可。

如:/Numbb.xaml?pt1=aaaa&pt2=ccccc。

現在,我們把剛才的例子改一下,在主頁面上隨便放一個TextBox,我們要把這個頁面中輸入的內容傳遞到第二個頁面中。

  1. private void button1_Click(object sender, RoutedEventArgs e)
  2. {
  3. this.NavigationService.Navigate(new Uri("/pageSecond.xaml?str=" + textBox1.Text, UriKind.Relative));
  4. }


在第二個頁面中取出數據。在第二個頁面中取出數據。

  1. // 導航到第二個頁面
  2. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
  3. {
  4. base.OnNavigatedTo(e);
  5. // 傳遞的參數叫什麽名字,這裏就按什麽名字來取。
  6. string pv = this.NavigationContext.QueryString["str"];
  7. this.textBlock1.Text = pv;
  8. }


技術分享

技術分享

Windows Phone開發(7):當好總舵主