go windows 编程
2014-12-06 23:10
106 查看
有朋友问起Windows Phone 7页面导航(Page Navigation)时,如何在不同页面之间进行传递参数。我们在此整理一下。
Windows Phone 7的页面间传参有三种方式。为了方便描述,我们将场景设定为:从A页面导航到B页面。
第一种方法:QueryString
这种传参方式继承自传统的网页开发模式。在A界面中,调用 NavigationService.Navigate() 方法时,所传递的Uri不仅仅是B页面的xaml文件地址,还包括字符串格式的参数。具体格式如下:
"/PageB.xaml?param1=stringValue1¶m2=stringValue2"
xaml文件地址后跟一个问号,代表参数声明的开始。多个参数用 & 符号间隔。
而在B页面中,需要重载基类的 OnNavigatedTo 方法,并从中获得所传递的参数值,示例代码如下:
string paramValue1 = NavigationContext.QueryString["param1"];
string paramValue2 = NavigationContext.QueryString["param2"];
该传参方式简单易用,唯一的不足之处是仅支持字符串类型。
第二种方法:全局参数
在 App.xaml.cs 文件中的 App 类中,定义任意类型的 public 属性(例如param3)。
在A页面中,设置该属性变量值,代码如下:
(App.Current as App).param3 = someValue;
在B页面中,访问该变量,代码如下:
someVariable = (App.Current as App).param3;
这种传参方式非常灵活,支持全局访问。
第三种方法:NavigationEventArgs.Content
其实即将离开A页面时,可以得到前往页面的实例(页面导航时,首先创建B页面的实例,再把当前显示内容从A页面替换为B页面)。因此,我们可以探知导航的目标页面是否是B页面,如果是,就向B页面“注入”一些内容。
A页面代码如下:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
var targetPage = e.Content as PageB;
if (targetPage!=null)
{
targetPage.param4 = someValue;
}
}
B页面代码如下:
public ParamType param4 { get; set; }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (param4 != null)
{
textBlock3.Text = param4.Name;
}
}
该方法同样支持各种参数类型。
以上各种参数传递的方式,孰优孰劣,就见仁见智了。
也许还会有人补充说,某些framework(例如prism、MVVMLightToolkit等) 还支持更多中传参方式(如messaging),但个人感觉那些东东简直”飞机拉马车“,不太适合小规模的手机应用开发。
OK,希望对各位有所帮助!代码送上:
下载代码
Windows Phone 7的页面间传参有三种方式。为了方便描述,我们将场景设定为:从A页面导航到B页面。
第一种方法:QueryString
这种传参方式继承自传统的网页开发模式。在A界面中,调用 NavigationService.Navigate() 方法时,所传递的Uri不仅仅是B页面的xaml文件地址,还包括字符串格式的参数。具体格式如下:
"/PageB.xaml?param1=stringValue1¶m2=stringValue2"
xaml文件地址后跟一个问号,代表参数声明的开始。多个参数用 & 符号间隔。
而在B页面中,需要重载基类的 OnNavigatedTo 方法,并从中获得所传递的参数值,示例代码如下:
string paramValue1 = NavigationContext.QueryString["param1"];
string paramValue2 = NavigationContext.QueryString["param2"];
该传参方式简单易用,唯一的不足之处是仅支持字符串类型。
第二种方法:全局参数
在 App.xaml.cs 文件中的 App 类中,定义任意类型的 public 属性(例如param3)。
在A页面中,设置该属性变量值,代码如下:
(App.Current as App).param3 = someValue;
在B页面中,访问该变量,代码如下:
someVariable = (App.Current as App).param3;
这种传参方式非常灵活,支持全局访问。
第三种方法:NavigationEventArgs.Content
其实即将离开A页面时,可以得到前往页面的实例(页面导航时,首先创建B页面的实例,再把当前显示内容从A页面替换为B页面)。因此,我们可以探知导航的目标页面是否是B页面,如果是,就向B页面“注入”一些内容。
A页面代码如下:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
var targetPage = e.Content as PageB;
if (targetPage!=null)
{
targetPage.param4 = someValue;
}
}
B页面代码如下:
public ParamType param4 { get; set; }
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (param4 != null)
{
textBlock3.Text = param4.Name;
}
}
该方法同样支持各种参数类型。
以上各种参数传递的方式,孰优孰劣,就见仁见智了。
也许还会有人补充说,某些framework(例如prism、MVVMLightToolkit等) 还支持更多中传参方式(如messaging),但个人感觉那些东东简直”飞机拉马车“,不太适合小规模的手机应用开发。
OK,希望对各位有所帮助!代码送上:
下载代码
作者: 李靖南 出处:http://elecpiano.blog.51cto.com/ Email: elecpiano@gmail.com 新浪微博: http://weibo.com/zengnami MSN: zengnami@hotmail.com QQ: 52717278 关于作者: 从事微软平台解决方案的设计与实现。主要专注于 Windows 8 及 Windows Phone 7 应用开发,及前者与微软云计算平台(Azure)的结合。 本文版权归作者和51CTO共有,欢迎转载,但未经作者同意则必须保留此段声明,并在文章较明显位置给出原文连接。非常感谢! |
相关文章推荐
- GO 语言编程 windows 环境搭建
- 《Go语言入门》如何在Windows下安装Go语言编程环境
- go语言编程在windows下开发环境配置(图文)
- Go编程基础—windows下Go语言开发环境搭建
- 在windows环境下搭建go编程环境
- go语言编程在windows下开发环境配置(图文)
- Windows通知栏图标高级编程概述
- windows网络编程_阶段总结(1)
- 如何使对话框中接收到WM_CHAR消息(Windows编程)
- 面向对象的Windows编程实战(上)(使用C++和Win32 API)
- 通过COM技术实现Windows外壳编程
- Windows环境变量编程设定
- 面向对象的Windows编程实战(下)
- Windows 图形编程(Windows Graphics Programming Win32 GDI and DirectDraw)
- WINDOWS编程入门一个初级问题的分析
- 使用C#编程将websphere MQ 5.3 windows客户端消息发送到linux服务器端
- Windows 输入法编程 (上)
- 在 Borland C++BuilderX for Windows 中进行 GTK+ 编程
- 基于多线程技术和自定义消息编程实现Windows 9x异步串行通信
- 在 Borland C++BuilderX for Windows 中进行 GTK+ 编程