Windows Phone 7 开发—页面间传值【转】
2012-05-08 18:20
579 查看
上篇文章中介绍了如何进行页面间导航(跳转)操作,本文来说说页面间的传值操作。在页面间导航时传递参数的方式大致有3种,QueryString,全局变量和独立存储。独立存储还可用于在一个程序的多次执行中共享变量,我会在介绍独立存储的文章中说明。本文只介绍前两种传值方式。
一.QueryString方式
我沿用了上篇文章中的演示程序,去掉了页面1中的HyperlinkButton,并在页面2中添加一个文本框用以呈现数据。如下图:
代码
using Microsoft.Phone.Shell;
程序代码如下,页面1中的代码如下:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (PhoneApplicationService.Current.State.ContainsKey("InputText"))
{
txtPage1.Text = PhoneApplicationService.Current.State["InputText"] as string;
}
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
PhoneApplicationService.Current.State["InputText"] = txtPage1.Text;
base.OnNavigatedFrom(e);
}
页面2中的代码如下:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (PhoneApplicationService.Current.State.ContainsKey("InputText"))
{
txtPage2.Text = PhoneApplicationService.Current.State["InputText"] as string;
}
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
PhoneApplicationService.Current.State["InputText"] = txtPage2.Text;
base.OnNavigatedFrom(e);
}
四.关于OnNavigatedTo和OnNavigatedFrom方法
我觉得这两个方法的名字起的不太好,有时候容易混淆,如果把OnNavigatedTo改为OnNavigatedToThisPageFromOther,把OnNavigatedFrom改为OnNavigatedFromThisPageToOther就会很清晰了,当然这只是帮助我们记忆的一种方法了。下面是MSDN中对这两个方法的一些建议:
OnNavigatedTo:重写 OnNavigatedTo 方法以检查导航请求并且准备供显示的页面。例如,可以加载请求的数据并且启用或禁用可视化元素。通常是使用 OnNavigatedTo 方法,而非为Loaded事件创建事件处理程序。最好使用 OnNavigatedTo 方法,因为只在每次页面成为活动页面时调用该方法一次。Silverlight 框架在每次将元素添加到可视化树时引发Loaded事件,在激活某一页面时该事件可能会多次发生。
OnNavigatedFrom:重写 OnNavigatedFrom 方法以便在页面成为非活动时对该页面执行最后的操作。例如,可以更新与该页面相关的数据。通常是使用 OnNavigatedFrom 方法,而非为Navigated事件创建事件处理程序。最好使用 OnNavigatedFrom 方法,因为不必再从 NavigationService 对象移除事件处理程序以避免对象生存期问题。
五.下载示例代码:http://www.2cto.com/uploadfile/2011/1012/20111012072920454.zip
摘自:金山崟霸
原文链接:http://www.2cto.com/kf/201110/107495.html
一.QueryString方式
我沿用了上篇文章中的演示程序,去掉了页面1中的HyperlinkButton,并在页面2中添加一个文本框用以呈现数据。如下图:
代码
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
App app = Application.Current as App;
if (app.InputText != null)
txtPage1.Text = app.InputText;
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
App app = Application.Current as App;
app.InputText = txtPage1.Text;
base.OnNavigatedFrom(e);
}
我在OnNavigatedTo方法内,读取App类的InputText值,为的是当在页面2中修改了文本后可以反映到页面1中。注意:OnNavigatedTo方法是在当前页面被激活(成为活动页面)时调用的。在OnNavigatedFrom方法中将文本框赋给App类的InputText属性,供页面2去读取。
页面2中的代码如下:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
App app = Application.Current as App;
if (app.InputText != null)
txtPage2.Text = app.InputText;
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
App app = Application.Current as App;
app.InputText = txtPage2.Text;
base.OnNavigatedFrom(e);
}
页面2中的操作与页面1类似。这样,当我们再次将页面2中的文本修改为“Windows Phone 7!”,然后点击“前往第1页”按钮时,就可以得到想要的结果了:
三.PhoneApplicationService类 类似于App类,我们还可以将要在多个页面中访问的数据保存在PhoneApplicationService的State属性中。它的类型是IDictionary<string, object>,所以我们可以保存任意对象,不过前提是这个对象是可序列化的(serializable)。在程序中,我们无需自己创建的实例,通过PhoneApplicationService的静态属性Current就可以获取到已有的实例。注意:在程序中访问PhoneApplicationService类需要添加下面的名称空间:
using Microsoft.Phone.Shell;程序代码如下,页面1中的代码如下:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (PhoneApplicationService.Current.State.ContainsKey("InputText"))
{
txtPage1.Text = PhoneApplicationService.Current.State["InputText"] as string;
}
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
PhoneApplicationService.Current.State["InputText"] = txtPage1.Text;
base.OnNavigatedFrom(e);
}
页面2中的代码如下:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (PhoneApplicationService.Current.State.ContainsKey("InputText"))
{
txtPage2.Text = PhoneApplicationService.Current.State["InputText"] as string;
}
base.OnNavigatedTo(e);
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
PhoneApplicationService.Current.State["InputText"] = txtPage2.Text;
base.OnNavigatedFrom(e);
}
四.关于OnNavigatedTo和OnNavigatedFrom方法
我觉得这两个方法的名字起的不太好,有时候容易混淆,如果把OnNavigatedTo改为OnNavigatedToThisPageFromOther,把OnNavigatedFrom改为OnNavigatedFromThisPageToOther就会很清晰了,当然这只是帮助我们记忆的一种方法了。下面是MSDN中对这两个方法的一些建议:
OnNavigatedTo:重写 OnNavigatedTo 方法以检查导航请求并且准备供显示的页面。例如,可以加载请求的数据并且启用或禁用可视化元素。通常是使用 OnNavigatedTo 方法,而非为Loaded事件创建事件处理程序。最好使用 OnNavigatedTo 方法,因为只在每次页面成为活动页面时调用该方法一次。Silverlight 框架在每次将元素添加到可视化树时引发Loaded事件,在激活某一页面时该事件可能会多次发生。
OnNavigatedFrom:重写 OnNavigatedFrom 方法以便在页面成为非活动时对该页面执行最后的操作。例如,可以更新与该页面相关的数据。通常是使用 OnNavigatedFrom 方法,而非为Navigated事件创建事件处理程序。最好使用 OnNavigatedFrom 方法,因为不必再从 NavigationService 对象移除事件处理程序以避免对象生存期问题。
五.下载示例代码:http://www.2cto.com/uploadfile/2011/1012/20111012072920454.zip
摘自:金山崟霸
原文链接:http://www.2cto.com/kf/201110/107495.html
相关文章推荐
- Windows phone手机开发之图片选择器,照相机功能,计时器,加速度,图片路径问题,页面间传值,随机产生数字
- 一起学Windows phone 7开发(二.页面间跳转与传值)
- Windows phone 7开发(二.页面间跳转与传值)
- Windows phone 7开发(二.页面间跳转与传值)
- 一起学Windows phone 7开发(二.页面间跳转与传值)
- Windows phone 7开发--页面间跳转与传值
- Windows Phone 7 开发探索笔记6——页面间传值
- 一起学Windows phone 7开发(二.页面间跳转与传值)
- Windows phone 7开发之(页面间跳转与传值)
- Windows phone 7开发之(页面间跳转与传值)
- [Windows Phone 7]如何导航页面和页面间传值
- Windows Phone开发(9):关于页面状态 转:http://blog.csdn.net/tcjiaan/article/details/7292160
- Windows Phone开发(9):关于页面状态
- windows phone不同页面间传值
- 未雨绸缪,用silverlight开发windows phone-(页面间跳转以及“页间传参”、旋转屏幕)
- Windows Phone开发之路(17) 如何在页面间共享数据
- iOS开发—页面传值汇总
- Windows Phone开发中页面用法解析
- Windows Phone开发(9):关于页面状态
- iOS开发:通过block在两个页面间传值