创建一个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_Navigation15 {16     public partial class MainPage : PhoneApplicationPage17     {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.QueryString46        //    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)

转载于:https://www.cnblogs.com/zouzf/archive/2012/03/19/2406224.html

windows phone 学习之页面导航和数据传递相关推荐

  1. 浅谈ASP中Web页面间的数据传递

    [简 介] 基于Web的动态网页设计必会涉及到页面间的数据传递,文章探讨了ASP设计中常用的Web页面间的数据传递方式,分析各种数据传递方式的使用方法.使用场合及优缺点,其都是设计阶段选择数据传递方式 ...

  2. vue页面跳转数据传递

    vue页面跳转数据传递 方法一: 第一页跳转赋值: toParameter:function(row) { this.$router.push({   path:'cardParameter',   ...

  3. vue 同页面不同组件数据传递

    不用 vuex 同页面不同组件数据传递,用vuex的这篇文章可以忽略! 直接举例: 一个页面有两个组件,其中组件A的数据可以传递到组件B,同理组件B的数据可以传递到组件A, 即AB两个组件可以互相传递 ...

  4. android webrtc学习五(webrtc视频数据传递和切换摄像头问题处理)

    android webrtc学习五(webrtc视频数据传递和切换摄像头问题处理) Android webrtc摄像头流程分析 1.打开摄像头 2.获取流数据 摄像头切换 问题场景:在使用华为手机(忘 ...

  5. 微信小程序父子页面间得数据传递(对象或者数组)

    1.页面跳转时向子页面传入数据 父页面js goexit() { //跳转方法var data = JSON.stringify(this.data.data.follow) // this.data ...

  6. WEB前端 vue学习二 组件之间的数据传递

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...

  7. 小程序:自定义组件的实现方法及自定义组件与页面间的数据传递

    首先我们在pages文件夹下创建components目录用于存放自定义组件.如图所示,以我创建的dialog组件为例,自定义组件的格式与页面一样,分为4个文件.   图1                ...

  8. 微信小程序页面间的数据传递和数据共享

    方法一:利用url 如下代码所示,首先在.wxml文件中找到更多按钮并绑定相应方法,接着通过data-name指定所传参数的名字,如图所传参数名为:category. <view class=& ...

  9. 小程序丨从子页面退回父页面时的数据传递

    在微信小程序中,从父级页面转到下一个页面,一般可以通过navigate或redirect时候的url来携带参数,然后在目标页面的onLoad函数参数中获取这些url参数,可以参考之前写的http:// ...

最新文章

  1. OSChina 技术周刊第九期 —— 每周技术精选,值得一看!
  2. 网页html文档头部声明的两种常用模式
  3. 用numpy做图像处理
  4. 2021-01-21 linux shell脚本实现间隔一定时间执行一次任务
  5. 学习分布式不得不会的CAP理论
  6. 豆瓣最高评分8.1!万维钢:读懂这本书,你会比身边人更深的理解这个时代
  7. CKEditor快速介绍与入门示例
  8. ES6学习(七)—Set 和 Map 数据结构
  9. elasticsearch问题解决之分片副本UNASSIGNED
  10. matlab怎么构建函数模型,matlab数学模型建立(如何用matlab建立数学模型及求解。哪位高手给个模版。)...
  11. 直播视频网站源码,静态时钟
  12. 查看python包的版本
  13. 演讲稿【物性的神奇】
  14. 【092】召唤神龙-指尖大鱼吃小鱼的魔性游戏
  15. 高校社团管理系统java_高校社团管理系统设计及实现.doc
  16. 会说话的代码 Python pyttsx3,及AttributeError:partially initialized module......(......)报错,解决方法
  17. python不改变图片尺寸压缩到指定大小
  18. mysql添加多列_mysql 怎么给一个表一次增加多个字段? ?
  19. 《Simulating Knitted Cloth at the Yarn Level》论文笔记
  20. Flume KafkaChannel的使用

热门文章

  1. JVM GC性能方面的考虑(吞吐量和STW)
  2. Mybatis核心配置文件SqlMapConfig.xml独立使用配置内容
  3. springmvc配置文件的主要内容
  4. 脉冲宽度测量程序 c51 c语言,基于C51单片机和LCD1602显示的超声波测距仪C语言程序...
  5. RocketMQ历史版本下载
  6. 泛函分析4——希尔伯特空间
  7. opencv mat release thrown_【OpenCV+Python】图像与视频处理入门
  8. tomcat和idea都占用了8080_IDEA 启动tomcat 端口占用原因以及解决方法( 使用debug模式)...
  9. python核心教程百度云_Python核心技术与实战 共44讲 中文pdf高清版
  10. OS / Linux / 制作 deb 包