Windows Phone開發(fā)(7):當(dāng)好總舵主
吹完了頁面有關(guān)的話題,今天我們來聊一下頁面之間是如何導(dǎo)航的,在更多情況下,我們的應(yīng)用程序不會只有一個頁面的,應(yīng)該會有N個,就像我們做桌面應(yīng) 用開發(fā)那樣,我們一個應(yīng)用程序中可能不止一個窗體(極簡單的程序除外),我們要處理窗體之間的切換;同理地,在進行Web開發(fā)的時候,我們的Web應(yīng)用程 序可能也不止一個頁面,我們要處理頁面之間的切換。當(dāng)然了,在我們的手機應(yīng)用中,同樣需要這種操作,我們稱之為“導(dǎo)航”,作為開發(fā)者,我們?nèi)P操控頁面之 間的切換,所以說,我們也當(dāng)了App的“總舵主”。
一、如何進行導(dǎo)航。
新建一個WP應(yīng)用項目,在主頁面中放一個HyperlinkButton控件,把NavigateUri的值設(shè)為 /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"/>
第二種導(dǎo)航方法是通過代碼方式實現(xiàn),如按鈕的單擊事件。
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- this.NavigationService.Navigate(new Uri("/pageSecond.xaml", UriKind.Relative));
- }
二、OnNavigatedFrom 方法和OnNavigatedTo 方法。
- // 離開主頁面
- protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
- {
- base.OnNavigatedFrom(e);
- System.Diagnostics.Debug.WriteLine("***** 已離開主頁面。");
- }
B、在第二個頁面中添加以下代碼。
- // 導(dǎo)航到第二個頁面
- protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
- {
- base.OnNavigatedTo(e);
- System.Diagnostics.Debug.WriteLine("***** Hi,已經(jīng)來到第二個頁面了。");
- }
然后,你運行程序?qū)Ш揭幌?,看?ldquo;輸出”窗口里面有什么?
三、如何在頁面間傳遞參數(shù)。
在安卓開發(fā)中,從一個Activity到另外一個Activity,需要Intent對象傳遞內(nèi)容,不過,在WP開發(fā)中,我們只需要像WEB頁面那樣在URI在附加上參數(shù)即可。
如:/Numbb.xaml?pt1=aaaa&pt2=ccccc。
現(xiàn)在,我們把剛才的例子改一下,在主頁面上隨便放一個TextBox,我們要把這個頁面中輸入的內(nèi)容傳遞到第二個頁面中。
- private void button1_Click(object sender, RoutedEventArgs e)
- {
- this.NavigationService.Navigate(new Uri("/pageSecond.xaml?str=" + textBox1.Text, UriKind.Relative));
- }
在第二個頁面中取出數(shù)據(jù)。在第二個頁面中取出數(shù)據(jù)。
- // 導(dǎo)航到第二個頁面
- protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
- {
- base.OnNavigatedTo(e);
- // 傳遞的參數(shù)叫什么名字,這里就按什么名字來取。
- string pv = this.NavigationContext.QueryString["str"];
- this.textBlock1.Text = pv;
- }