吹完了頁面有關的話題,今天我們來聊一下頁面之間是如何導航的,在更多情況下,我們的應用程式不會只有一個頁面的,應該會有N個,就像我們做案頭應 用開發那樣,我們一個應用程式中可能不止一個表單(極簡單的程式除外),我們要處理表單之間的切換;同理地,在進行Web開發的時候,我們的Web應用程式可能也不止一個頁面,我們要處理頁面之間的切換。當然了,在我們的手機應用中,同樣需要這種操作,我們稱之為“導航”,作為開發人員,我們全盤操控頁面之間的切換,所以說,我們也當了App的“總舵主”。
一、如何進行導航。進行頁面導航的一種簡單方法就是使用HyperlinkButton控制項的NavigateUri屬性來指定要導航的目標頁面的XAML檔案的URI,下面通過一個簡單的例子來試試吧。
建立一個WP應用項目,在首頁面中放一個HyperlinkButton控制項,把NavigateUri的值設為 /pageSecond.xaml,接著建立一個頁面,命名為pageSecond.xaml。
<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"/>
第二種導航方法是通過代碼方式實現,如按鈕的單擊事件。
private void button1_Click(object sender, RoutedEventArgs e) { this.NavigationService.Navigate(new Uri("/pageSecond.xaml", UriKind.Relative)); }
二、OnNavigatedFrom 方法和OnNavigatedTo 方法。1、當使用者即將離開當前頁時,將調用OnNavigatedFrom 方法;2、當使用者從其它頁面導航到該頁面時調用OnNavigatedTo 方法。相信大家多寫一些代碼測試一下,這個就很好理解了。A、在首頁面中添加以下代碼。
// 離開首頁面 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedFrom(e); System.Diagnostics.Debug.WriteLine("***** 已離開首頁面。"); }
B、在第二個頁面中添加以下代碼。
// 導航到第二個頁面 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,我們要把這個頁面中輸入的內容傳遞到第二個頁面中。
private void button1_Click(object sender, RoutedEventArgs e) { this.NavigationService.Navigate(new Uri("/pageSecond.xaml?str=" + textBox1.Text, UriKind.Relative)); }
在第二個頁面中取出資料。在第二個頁面中取出資料。
// 導航到第二個頁面 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); // 傳遞的參數叫什麼名字,這裡就按什麼名字來取。 string pv = this.NavigationContext.QueryString["str"]; this.textBlock1.Text = pv; }