【16.Windows Phone】16.3多页面程序

1.页面间跳转

  • NavigateUri(页面定向跳转) HyperlinkButton控件可以简单的实现页面之间的相互跳转,只需要指定Uri,就可以在点击后跳转到相应的页面。类似于Web中的超链接。Uri的书写格式与前面的一致(Uri格式易错)。用于在Xaml页面之间做定向跳转。 Uri格式实例:/NavigatingBetweenPages;component/OtherPages/Page1.xaml NavigatingBeteenPage是项目名称,component/后面的是要跳转到的页相对于项目的路径。注意最前面的“/”不可以省略。
  • 我们在写Uri的时候可以省略相对项目根目录之前的字符,功能相同。例如:

    /NavigatingBetweenPages;component/OtherPages/Page1.xaml

    OtherPages/Page1.xaml

  • NavigationService(C#灵活跳转) 当要跳转的页面地址不固定,需要给据不同情况跳转不同页面时,需要在C#中需要使用NavigationService的Navigate()。此方法更加灵活可控。
  • NavigationService(实现常规控件的超链) 除了HeyperlinkButton实现超链接,其他常规的控件只要设定控件的NavigationServiece.Navigate()指定uri也可以是实现跳转。
  • NavigationService 常用成员

GoBack()


后退一步


GoForward()


前进一步


CanGoBack


判断是否可以后退,如果没有之前页面,调用GoBack()会报错

  • 常用页面导航相关事件

OnNavigatedTo


由其他页面导航到当前页面后触发


OnNavigatedFrom


从当前页面导航到其他页面后触发


OnNavigatingFrom


从当前页面导航到其他页面前触发


OnBackKeyPress


用户按下手机上的后退按钮时触发,可以在其事件处理函数中执行e.Cancel =true取消后退

2.页间参数传递

  Windows Phone在页面跳转时进行参数传递的方式与Web非常类似。在跳转的Uri中传递参数即可。在目标页面中获取参数通过NavigationContext.QueryString["id"]方法,与Asp.Net方式类似,但与Asp.Net不同的是,当没有传递参数时获取参数程序会抛出异常,Asp.Net拿到的参数为null而不会报异常。在Windows Phone中我们可以通过TryGetValue()来尝试获取参数。语法如下:

1 string id = "";
2 if (NavigationContext.QueryString.TryGetValue("id", out id))
3 textBlock1.Text = id;

3.页面跳转数据暂存

  当用用户按Back键返回app某个页面并且app没有退出时,页面对象一直存续在手机内存中,并没有销毁,所以用户依然可以看到原来所有的数据状态。用户从当前其他页面导航跳转到当前页面则不同,虽然页面地址相同,但此时系统为我们新创建了一个页面实例,之前页面对象从内存中释放,随之页面上得所有数据丢失,但有时我们需要保存原来原来页面的数据,比如用户注册,用户可能会跳转到一个新页中编辑省市数据等条目比较复杂的信息,完成跳转回注册主页,此时我们就需要在页面跳离注册页时暂存现有表单数据。解决方案是,在跳离包含用户编辑数据的页面之前现场数据到 Windows Phone为我们提供的临时存储区,页面跳回后从临时存储区中取出转台数据恢复现场。具体实现代码如下:

 1  //重写OnNavigatedFrom
 2 protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
 3 {
 4     phoneAppService.State["myValue"] = textBox1.Text;//记录现场
 5     base.OnNavigatedFrom(e);
 6 }
 7
 8 //重写OnNavigatedTo
 9 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
10 {
11     if (phoneAppService.State.ContainsKey("myValue"))
12     {
13     object someObject;
14     if (phoneAppService.State.TryGetValue("myValue", out someObject))
15             textBox1.Text = someObject.ToString();//恢复现场
16      }
17     base.OnNavigatedTo(e);
18 }
19         
  • 触类旁通

页面间跳转要保存现场数据监听的导航相关的事件,与逻辑删除(Tombstonling)处理方式一致,但逻辑删除监听的是控件changed(如,文本框的TextChanged)事件和页面的Loaded事件。因为我们应对的是用户点击Start或者Back的情况,当用户返回页面时,触发Loaded事件,考虑到用户可能随时离开本页,所以我们在用户修改信息的同时监听changed事件将数据同步存储。由此我们认识到,页面的加载(Load)和导航(OnNavigateTo)具有类似的功能,当我们来到一个页面不管是直接加载的页面还是从超链接跳转过来的页面都会触发OnNavigateTo和Loaded事件。它们之间是有严格顺序的,首先触发的是OnNavigateTo事件,然后才触发Loaded事件。

时间: 2024-10-10 01:43:49

【16.Windows Phone】16.3多页面程序的相关文章

[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 使用多线程提高程序性能

[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 使用多线程提高程序性能 本节导读: 多线程(Multithreading)使我们程序可以同时进行多任务处理,直接提高了程序的执行效率,学习多线程对提高程序运行能力非常必要,本节主要介绍多线程原理及.NET中多线程的应用. 1. 关于多线程 在介绍多线程之前,先了解一下进程. 进程:独立运行的程序称为进程.(比如Windows系统后台程序,也可以称为后台进程) 线程:对于同一个程序分为多个执行流,称为线程.

Windows Socket编程示例-TCP示例程序

前面一部分是介绍,后面有示例 1.网络中进程之间如何通信? 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. 使用TCP

将Windows系统编译的.NET Core程序发布到Ubuntu系统

在可移植方面.NET Core应用程序分为两种,Portable application(便捷,需要目标机器安装.NET Core Runtime)和Self-contained application(独立的,又名自宿主.目标机器不需要.NET Core Runtime ), 具体可参考文档:https://docs.microsoft.com/zh-cn/dotnet/articles/core/app-types 本次是将Portable App发布到Ubuntu 16.04上运行.发布方

windows下cmd命令提示符下让程序后台运行命令

如果你的程序需要在windows后台运行,并且是在cmd下启动,那么在执行的程序前加上start /b,比如start /b [程序名]. windows下start命令的详细参数及功能介绍如下: 文章来源 www.169it.com 启动一个单独的窗口运行指定的程序或命令. START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /

windows防火墙命令详解(程序启用命令行执行即可)

netsh firewall set portopening protocol = TCP port = 9998 name = ssssssssssssssssssssssss mode = ENABLE scope = SUBNET profile = CURRENT netsh advfirewall firewall add rule name = SQLPort dir = in protocol = tcp action = allow localport = 1433 remote

Windows编程 - 启动可执行(exe)程序 代码(C++)

启动可执行(exe)程序 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 通过输入程序位置启动可执行(exe)程序, 使用windows的CreateProcess()函数, 即可. 示例是调用预先生产的可执行(exe)程序. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <

Windows编程 - 终止可执行(exe)程序 代码(C++)

终止可执行(exe)程序 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 终止可执行(exe)程序, 首先遍历进程, 找到进程名称对于的进程ID号, 然后根据进程ID, 终止进程. 示例代码: 包括遍历进程代码, 和关闭代码. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <

在Windows版本Docker上运行GUI程序

看到很多人在Docker问题区讨论:如何在OS X和Windows的Docker上运行GUI程序, 随手记录几个参考资料: https://github.com/docker/docker/issues/8710 http://sourceforge.net/projects/xming/ https://www.gitbook.com/book/yeasy/docker_practice/details

windows系统下c语言暂停程序

原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { system("pause");//利用了DOS命令,按任意键继续 return 0; } 方法二: #include int main() { getchar();//须按回车键结束,不是任意键 return 0; }

[后端人员耍前端系列]KnockoutJs篇:使用WebApi+Bootstrap+KnockoutJs打造单页面程序

一.前言 在前一个专题快速介绍了KnockoutJs相关知识点,也写了一些简单例子,希望通过这些例子大家可以快速入门KnockoutJs.为了让大家可以清楚地看到KnockoutJs在实际项目中的应用,本专题将介绍如何使用WebApi+Bootstrap+KnockoutJs+Asp.net MVC来打造一个单页面Web程序.这种模式也是现在大多数公司实际项目中用到的. 二.SPA(单页面)好处 在介绍具体的实现之前,我觉得有必要详细介绍了SPA.SPA,即Single Page Web App