欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

windows phone 学习之页面导航和数据传递

来源: 开发者 投稿于  被查看 26061 次 评论:265

windows phone 学习之页面导航和数据传递


创建一个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             //返回上一个页面www.2cto.com
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)

 

摘自  仙外仙

相关文章

    暂无相关文章
相关频道:

用户评论