摘要:wp8.1与wp8中很多API是不一样了,wp8.1把以前wp7.x时的api去掉了,更多与win8.1的API相似。比如以下的页面导航和页面之间的值传递

1、页面导航

利用Frame.Navigate() 方法,C#语句如下:

  Frame.Navigate(typeof(Page2));//Page2为一个页面的名称

这里需要注意的是此方法是可以重载的,即后面介绍的页面间值传递方法。

2、页面间值传递

这里利用Frame.Navigate()重载方法,进行单个值传递和多个值传递

1)单个值传递:可以传递字符、数字等数据,如

在Page1.xaml.cs中

 na=myTextbox.text;
Frame.Navigate(typeof(Page2), na);

而在Page2.xaml.cs中,接收数据

        //在OnNavigate()方法中接收传递的数据

        protected override void OnNavigatedTo(NavigationEventArgs e)
{ myTextblock.Text = e.Parameter.ToString();
}

2)多值传递:其基本方法也是和单值传递方法的思想是一样的。

参考方法如下:

首先新建个类

namespace navigateSample
{
public class NavigateContext
{
public string name { get; set; }
public int id { get; set; }
public NavigateContext(string name, int id)
{
this.id = id;
this.name = name;
}
}
}

然后利用NavigateContext类的进行多值传递

            NavigateContext na = new NavigateContext(myTextbox.Text, (int)mySlider.Value);
Frame.Navigate(typeof(Page2), na);//myTextbox是Page页面中Textbox.name, mySlider是Page页面中Slider.name

而在Page2.xaml.cs中,接收数据

        protected override void OnNavigatedTo(NavigationEventArgs e)
{
var na = (NavigateContext)e.Parameter;
myTextblock1.Text =na.name;
myTextblock2.Text = na.id.ToString();
}

总结:以上知识是学习Bob的视频所学到的,如果有什么不对欢迎指出!

--------------------------------------------------------------------------------------------------------12.05更新

理论知识

一、页面导航

1、窗口、框架、页面的关系(Windows, Frames and Pages)

windows包含单个frame,大小在面积的100%。
frame中包含的页面,也通常在大小提供给windows的面积的100%。
在Windows商店应用程序的平板/ PC,应用程序可以有多个窗口。在WP中,应用程序只有一个WINDOW。

2、框架和导航返回堆栈(The Frame and the Navigation BackStack)

Frame是在应用程序启动被创建,Frame为页面Page充当容器,同时当你导航到其他页面,它会保存一个导航历史。

例子:1)在页面中导航,C#代码如下:

private void itemListView_ItemClick(object sender, ItemClickEventArgs e)
{
// Navigate to the appropriate destination page, configuring the new page
// by passing required information as a navigation parameter
var itemId = ((MyListViewItem)e.ClickedItem).UniqueId;
Frame.Navigate(typeof(MyDetailPage), itemId);
}

2)导航后退,C#代码:

private void btnGoBack_Click(         object sender, RoutedEventArgs e)
{
if (this.Frame.CanGoBack)
this.Frame.GoBack();
}

3、返回键注意项

1)标准的Windows Phone UX(用户体验)是使用返回键导航背部或关闭瞬间UI。默认情况下,返回键导致导航回到以前的应用程序 ,而不是页面!
 2)在Windows Phone的商店应用程序,你必须包含的代码重写这导致应用程序中向后导航。
 3)不同于Windows Phone的Silverlight(即WP8设计): 在一个应用程序,倒着页面导航是默认该框架
 4)重写返回键:空白模板是不包含返回键的处理代码,而在Hub模板中包含NavigationHelper类,既可以正确向后页面导航。如果你需要重写返回键,替换你自己的代码自定义导航处理,下面是在一个页面中重写返回键C#代码:

public sealed partial class SecondPage : Page
{
... protected override void OnNavigatedTo(NavigationEventArgs e)
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;
} protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed;
} async void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e)
{
e.Handled = true; // We've handled this button press // If the secondary UI is visible, hide it
if (SecondaryUI.Visibility == Visibility.Visible )
{
FadeOutSecondaryStoryboard.Begin();
}
else
{
// Standard page backward navigation
if (Frame.CanGoBack)
Frame.GoBack();
}
}

如果整个APP都需求返回键重写,可以把类似代码写到APP.XAML.CS文件当中。

4、页面缓存模式(Page Cache Mode)

当你第一次导航到一个页面类型,一个新的实例(页面)被创建。当你离开此页面,该实例是否被缓存或被破坏由页面的NavigationCacheMode属性决定的

NavigationCacheMode.Disabled:无论你导航向前或向后的页面,你得到的页面的新实例
NavigationCacheMode.Enabled:页面可以被缓存,但当缓存超过一定数值(WP8.1中默认是1,是由Frame.CacheSize属性确定的),缓存实例将被丢弃

NavigationCacheMode.Required:页面可以被缓存,而且不管框架(Frame.CacheSize)的大小,缓存的实例可以为每次访问重新应用,即页面的内容还是一样的。

5、NavigationHelper类

可以使用 NavigationHelper类 来保存和重载入页面的状态。在基础页面模板中,会自动载入NavigationHelper类 ,我们可以借此来载入此类。

 

wp8.1 Study1: 页面导航&页面间值传递的更多相关文章

  1. php从入门到放弃系列-04.php页面间值传递和保持

    php从入门到放弃系列-04.php页面间值传递和保持 一.目录结构 二.两次页面间传递值 在两次页面之间传递少量数据,可以使用get提交,也可以使用post提交,二者的区别恕不赘述. 1.get提交 ...

  2. Chrome调试本地文件无法使用window.opener对象进行窗口间值传递

    今天在百度BAE上建了个应用,svn上传后发现页面间互调有些问题,几经查询发现: (1)IE下正常的window.opener.object1.object2页面间对象访问方法在Chrome下不能使用 ...

  3. 详细介绍ASP.NET页面间数据传递的使用方法

    源码:http://www.jinhusns.com/Products/Download/?type=xcj 在ASP.NET中,页面间数据传递的方法有很多.下面为大家总结一下,页面间数据传递的方法. ...

  4. ASP.NET页面间数据传递的方法<转>

    ASP.NET页面间数据传递的方法 作者: 灰色的天空2  来源: 博客园  发布时间: 2010-10-28 11:06  阅读: 822 次  推荐: 0   原文链接   [收藏]   摘要:本 ...

  5. ASP.NET中实现页面间数据传递的方法

    说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好.   ASP.NET页面间数据传递 ...

  6. ASP.NET 页面间数据传递的方法

    在做WEB开发时,很多地方会涉及到页面间的数据传递.这几天在完善教务基础系统,遇到了这个问题,上网查了一些资料,现总结如下: 说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是 ...

  7. [SpringMVC-值传递] 初始SpringMVC--SpringMVC中的值传递

    把页面中输入的值传递到后台以及后台向前台传递,有以下几种方式 这里以登录为例子,实现打印前端页面的值 1,新建一个控制器,根据不同的请求地址实现不同的请求方式 LoginController.java ...

  8. WP8.1 页面导航 缓存问题

    最近开始学习wp8.1开发,在页面的导航学习时发现了一点问题,即当使用Frame.Navigate()方法进行页面的跳转时,每次都会重新实例化一个页面.而在新的页面采用Frame.GoBack()或者 ...

  9. wp8.1 页面返回 页面导航

    public The_second() public second() { this.InitializeComponent(); Frame frame = Window.Current.Conte ...

随机推荐

  1. Linux内核态用户态相关知识

    http://www.cnblogs.com/bakari/p/5520860.html http://www.cnblogs.com/Anker/p/3269106.html

  2. 使用SurfaceView

    一.新建一个工程“LearnSurfaceView” 二.新建一个类“MySurfaceView” public class MySurfaceView extends SurfaceView imp ...

  3. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  4. git的作用和原理(待续)

    先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令: $ sudo git init --bare sample.git Git就会创建一个裸仓库,裸仓库没有 ...

  5. 【服务器环境搭建-Centos】Nginx1.9.9 配置启用 --待续

    1.worker_processes worker_processes 4;## 4核,所以设置4个 worker_cpu_affinity 0001 0010 0100 1000; nginx在启动 ...

  6. form表单生成的简单理解

    1, drupal_get_form,只要是准备$form_state['build_info']['arg'], 然后进入drupal_build_form(), 2, form build 主要有 ...

  7. Machine Learning - 第4周(Neural Networks: Representation)

    Neural networks is a model inspired by how the brain works. It is widely used today in many applicat ...

  8. 基因组 de novo 组装原理

    Falcon软件的组装流程 为了错误校正,将原始子reads进行overlap 预组装和错误校正 错误校正后reads的overlap检测 overlap的过滤 从overlap构建图 从图构建con ...

  9. 【转】 Linux 线程同步的三种方法

    线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点.linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥锁(mutex) 通过锁机制实现线程间的 ...

  10. NKW

    JavaScript几种原生函数 - 博客频道 - CSDN.NEThttp://blog.csdn.net/h378588270/article/details/12948163 .json_百度搜 ...