windows phone 學習之頁面導航和資料傳遞

來源:互聯網
上載者:User

建立一個windows phone 應用程式,在xaml檔案裡添加三個按鈕和三個textblock,添加一個windows phone 頁面(命名為SecondPage),同樣也是添加三個按鈕和三個textblock。要實現的目標是從MainPage 頁面導航到 SecondPage 頁面,並且能把一些參數傳遞過去,之後還能從 SecondPage 返回到 MainPage。

MainPage.xaml.cs 代碼如下:

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12 using Microsoft.Phone.Controls;
13
14 namespace WPApp_Navigation
15 {
16 public partial class MainPage : PhoneApplicationPage
17 {
18 // 建構函式
19 public MainPage()
20 {
21 InitializeComponent();
22
23 this.button1.Click += new RoutedEventHandler(button1_Click);
24 }
25
26 void button1_Click(object sender, RoutedEventArgs e)
27 {
28 // string path = "/SecondPage.xaml";
29 // string target = path + string.Format("?s1={0}","zou");
30
31 //賦給Uri的字串參數中間別留空格,多個參數中間用&連起來
32 this.NavigationService.Navigate(new Uri("/SecondPage.xaml?s1=aaa&s2=bbb&s3=ccc", UriKind.RelativeOrAbsolute));
33 }
34 }
35 }

 

代碼this.NavigationService.Navigate(new Uri("/SecondPage.xaml?s1=aaa&s2=bbb&s3=ccc", UriKind.RelativeOrAbsolute));是核心

建立一個Uri對象,Uri裡的第一個參數裡面的/SecondPage.xaml 表示將要導航到的頁面的路徑,問號後面的就是要傳遞過去的參數,s1、s2、s3都是參數名 ,等號後面的是它們的值,參數之間用 & 連起來;Uri的第二個參數 UriKind.RelativeOrAbsolute 表示前面的路徑是相對的還是絕對的,RelativeOrAbsolute 表示 可能是相對的也可能是絕對的。

 

SecondPage.xaml.cs 代碼如下:

 

 1 using System.Windows.Media.Animation;
2 using System.Windows.Shapes;
3 using Microsoft.Phone.Controls;
4
5 namespace WPApp_Navigation
6 {
7 public partial class SecondPage : PhoneApplicationPage
8 {
9 public SecondPage()
10 {
11 InitializeComponent();
12 this.button1.Click += new RoutedEventHandler(button1_Click);
13
14 }
15
16 void button1_Click(object sender, RoutedEventArgs e)
17 {
18 //返回上一個頁面
19 this.NavigationService.GoBack();
20 }
21
22 //當該頁面是活動頁面時觸發
23 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
24 {
25 base.OnNavigatedTo(e);//調用基類的虛方法是應該的,但不是必須的
26
27 if (NavigationContext.QueryString.ContainsKey("s1"))
28 {
29 this.textBlock1.Text = NavigationContext.QueryString["s1"];
30 this.textBlock2.Text = NavigationContext.QueryString["s2"];
31 this.textBlock3.Text = NavigationContext.QueryString["s3"];
32 }
33 }
34
35 //當該頁面不是活動頁面時觸發
36 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
37 {
38 base.OnNavigatedFrom(e);
39 MessageBox.Show("離開SecondPage");
40 }
41
42
43 //public void Get()
44 //{
45 ////不能這樣在自己寫的方法裡調用NavigationContext.QueryString
46 // IDictionary<string, string> text = NavigationContext.QueryString;
47 //}
48
49 }
50 }

在這裡,重寫基類的OnNavigatedTo方法: protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

OnNavigatedTo方法會在當前頁面成為活動時被觸發,在這裡,可以使用 NavigationContext.QueryString 來擷取從MainPage傳遞過來的參數。NavigationContext.QueryString 的類型是 IDictionary<string, string> ,就是 鍵/值 對。

當我們想回到MainPage 頁面時,可以通過 this.NavigationService.GoBack(); 實現

在離開SecondPage 頁面時,如果我們想在離開前再做最後一點事情,可以放在 OnNavigatedFrom 函數裡,也是通過重寫基類的虛方法實現,當該頁面從活動變成不是活動頁面時觸發 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.