WP7中的页面导航与传值
2012-08-02 22:21
169 查看
使用Page控件很简单,和向项目中添加UserControl一样。
1.Page控件属性介绍
每一个Page控件内都会有一个NavigationService属性,这个属性就相当于访问Silverlight导航系统的入口,因为它提供了与Frame对象一样的方法和属性(Navigate()、GoBack()、GoForward(),属性有CanGoBack、CanGoForward、CurrentSource等)。意思就是说在Page里面就可以进行导航了..
this.NavigationService.Navigate(new
Uri("/Page2.xaml",
UriKind.Relative));
Page类还含有一个NavigationContext属性用来访问NavigationContext对象。使用这个属性可以获取当前的URL,使用QueryString可以获取URL中的参数( 该方法的赋值和使用在一块,与全局变量比不会太凌乱)。也就是说你可以在跳转页面的时候使用地址栏参数传值。如下:
string uriText =
String.Format("/Product.xaml?id={0}&type={1}",productID, productType); //等号前后不能有空格,否则不能传值
mainFrame.Navigate(new
Uri(uriText), UriKind.Relative);
这样你就可以传两个值到目标页面了 ..
然后在Priduct.xaml页面你就可以获取到值了:
int productID, type;
if (this.NavigationContext.QueryString.ContainsKey("productID"))
productID =
Int32.Parse(this.NavigationContext.QueryString["productID"]);
if (this.NavigationContext.QueryString.ContainsKey("type"))
type =
Int32.Parse(this.NavigationContext.QueryString["type"]);
当让你还可以使用其他方式传值,比如在存储在Appliaction(或者在项目命名空间下创建一个类(继承App),作用是一样的,这样程序比较清晰)对象中,或者是使用独立存储都可以实现,因为使用URL参数很容易就会被篡改..
保存页面状态
通常,用户第一次进入页面或者是使用前进后退按钮切换页面,都会重新创建一个对象,当用户离开,对象就会被释放。这种情况下,如果用户输入的有信息,再回到页面就会编程默认值,页面的其他成员也会初始化成默认值。而如果可以存储页面状态的话就不会出现这种情况了。
Silverlight允许使用Page.NavigationCacheMode属性来设置存储策略,这个属性的默认值是Disabled所以不会默认不会存储页面。把属性设置为Required那么页面就会保存到内存中。当用户离开页面再返回的时候就可以看到自己修改的内容依然存在,不过再次回到页面不会触发页面的构造方法,所以如果你在构造函数里写的有逻辑就需要注意了。不过会触发页面的Loaded事件。
NavigationCacheMode的另外一个值是Enabled,如果设置成这个值,那么页面就好与Frame.CacheSize(保存页面的数量)属性关联,加入CacheSize属性设置为10,当第11个页面存储进来的话第一个页面就会被释放。而NavigationCacheMode属性设置为Required属性页面就不会被计算在CacheSize中。这个可以根据自己的需要进行选择。
Page控件的方法
Page类包含了几个方法使你能更加灵活的管理导航。
OnNavigatedTo():当页面不再是框架中的活动页面时调用。
OnNavigatingFrom():当页面成为框架中的活动页面时调用。
OnNavigatedFrom():在页面即将不再是框架中的活动页面时调用。
1.Page控件属性介绍
每一个Page控件内都会有一个NavigationService属性,这个属性就相当于访问Silverlight导航系统的入口,因为它提供了与Frame对象一样的方法和属性(Navigate()、GoBack()、GoForward(),属性有CanGoBack、CanGoForward、CurrentSource等)。意思就是说在Page里面就可以进行导航了..
this.NavigationService.Navigate(new
Uri("/Page2.xaml",
UriKind.Relative));
Page类还含有一个NavigationContext属性用来访问NavigationContext对象。使用这个属性可以获取当前的URL,使用QueryString可以获取URL中的参数( 该方法的赋值和使用在一块,与全局变量比不会太凌乱)。也就是说你可以在跳转页面的时候使用地址栏参数传值。如下:
string uriText =
String.Format("/Product.xaml?id={0}&type={1}",productID, productType); //等号前后不能有空格,否则不能传值
mainFrame.Navigate(new
Uri(uriText), UriKind.Relative);
这样你就可以传两个值到目标页面了 ..
然后在Priduct.xaml页面你就可以获取到值了:
int productID, type;
if (this.NavigationContext.QueryString.ContainsKey("productID"))
productID =
Int32.Parse(this.NavigationContext.QueryString["productID"]);
if (this.NavigationContext.QueryString.ContainsKey("type"))
type =
Int32.Parse(this.NavigationContext.QueryString["type"]);
当让你还可以使用其他方式传值,比如在存储在Appliaction(或者在项目命名空间下创建一个类(继承App),作用是一样的,这样程序比较清晰)对象中,或者是使用独立存储都可以实现,因为使用URL参数很容易就会被篡改..
保存页面状态
通常,用户第一次进入页面或者是使用前进后退按钮切换页面,都会重新创建一个对象,当用户离开,对象就会被释放。这种情况下,如果用户输入的有信息,再回到页面就会编程默认值,页面的其他成员也会初始化成默认值。而如果可以存储页面状态的话就不会出现这种情况了。
Silverlight允许使用Page.NavigationCacheMode属性来设置存储策略,这个属性的默认值是Disabled所以不会默认不会存储页面。把属性设置为Required那么页面就会保存到内存中。当用户离开页面再返回的时候就可以看到自己修改的内容依然存在,不过再次回到页面不会触发页面的构造方法,所以如果你在构造函数里写的有逻辑就需要注意了。不过会触发页面的Loaded事件。
NavigationCacheMode的另外一个值是Enabled,如果设置成这个值,那么页面就好与Frame.CacheSize(保存页面的数量)属性关联,加入CacheSize属性设置为10,当第11个页面存储进来的话第一个页面就会被释放。而NavigationCacheMode属性设置为Required属性页面就不会被计算在CacheSize中。这个可以根据自己的需要进行选择。
Page控件的方法
Page类包含了几个方法使你能更加灵活的管理导航。
OnNavigatedTo():当页面不再是框架中的活动页面时调用。
OnNavigatingFrom():当页面成为框架中的活动页面时调用。
OnNavigatedFrom():在页面即将不再是框架中的活动页面时调用。
相关文章推荐
- 【转载】wp7中从墓碑化中重新激活时如何从app.xaml.cs中直接导航到程序的某个页面
- [翻译]WP7 QuickStart-第十篇-页面导航
- wp7中如和从app.xaml.cs中直接导航到程序的某个页面
- wp7跳转页面并传值
- WP7页面导航概述
- 使用C#开发Metro 风格应用的路线图 -- 在页面间导航、传值
- wp7跳转页面并传值
- WP7->界面->页面导航、切换及参数传递
- WP7 页面导航报错 跳到System.Diagnostics.Debugger.Break
- WP7.页面导航
- 页面导航【WP7学习札记之七】
- wp7 页面导航传值和在Tombstoning之后保存状态保存状态
- [Windows Phone 7]如何导航页面和页面间传值
- WP7页面导航
- wp7 页面导航方法
- JavaScript实现页面传值
- 【细说windows8开发——UI篇】页面导航
- Asp.Net页面之间传值
- 在asp网页中,只刷新iframe子页面中的内容,并传值过去,怎么实现呀!
- Windows Phone 7 开发探索笔记6——页面间传值