在本次修练开始之前,我们除了预设的 MainPage页面外,也另外新增了一个 Login页面,如下图示:

  

  MainPage.xaml页面长这样

  

  Login.xaml页面长这样

  

  因为我们的需求是要求使用者第一次使用 App时就先登入,所以我们必须在 MainPage显示之前就要强迫使用者导向到 Login页面。从我上一篇修练文章中可以看到我曾经用过 NavigationService来实作转向功能,如果你将转向的程式写在 Loaded事件 (如下程式码),那么使用者还是会先看到 MainPage的完整页面内容,然后才转向到 Login页面,虽然显示的时间非常短暂,只有 100 ~ 200ms而已,但使用者体验还是非常差,我们必须在页面显示前就转向到其他页面才行!

public MainPage()
 {
     InitializeComponent();        this.Loaded += new System.Windows.RoutedEventHandler(MainPage_Loaded);
 }    void MainPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
 {
     NavigationService.Navigate(new Uri("/Login.xaml", UriKind.Relative));  }

  接着你一定会想说把程式码搬进 MainPage建构子不就好了?很抱歉!在 MainPage 建构子执行的这个时间点,NavigationService是无法使用的,如果你硬要这么做,就会出现以下错误:

  

  我研究了一段时间后,其结论就是,这类「页面显示前就要转向」的需求不能在「页面层级」实现,必须到「应用程式」层级的地方来实现「显示前转向」需求,也就是在 App.xaml与 App.xaml.cs这个档案撰写一些程式码。

  如果你曾经研究过 Silverlight的 Navigation框架,有可能会知道有个 UriMapper类别,可以用来做一些网址的路由对应,要在 WP7实现这样的功能,请参考以下设定步骤:

<UriMapper:UriMapper x:Name="LoginPageMapper">        <UriMapper:UriMapping Uri="/MainPage.xaml"                              MappedUri="/Login.xaml" />    </UriMapper:UriMapper>

  1.首先,我们先开起 App.xaml档案,并先新增一个 UriMapper命名空间

  xmlns:UriMapper="clr-namespace:System.Windows.Navigation;assembly=Microsoft.Phone"

  如下图示:

  

  2.在应用程式资源的区段 ( )加入一个 UriMapper的定义,并且命名为 LoginPageMapper,而在其中唯一的一笔 UriMapper定义有两个属性需要设定,一个 Uri是属性,用来定义比对的网址;另一个是 MappedUri属性,用来定义当网址比对成功后应该转向到哪个网址。

  

  3.虽然已经定义了一笔 UriMapper定义,并不代表 UriMapper的规则已经正式启用,这我们所建立的只是一个「应用程式资源」而已,所以还必须开启 App.xaml.cs并在 App()建构子最后加上以下程式:

  1RootFrame.UriMapper =Resources["LoginPageMapper"] as UriMapper;

  此时我们的 UriMapper就正式生效了,如果你按下 F5执行,就会发现首页 ( MainPage.xaml )事实上并没有被导向,而是网址被改写 (Rewrite)成 /Login.xaml了,但我们看起来却好像是被导向的感觉!

  接下来就是如何灵活运用 UriMapper的时刻,你可以在 App()建构子透过程式码动态修改 MappedUri位址,好让页面能够转向 (虽然是改写网址,但我还是写转向比较容易理解 )到其他页面。

  例如说以下程式码,我可以读取在隔离储存区的应用程式设定中是否已经设定过 Username这个键值,如果有的话我就视为此人已经登入过,并动态的把 MappedUri属性修改成 /MainPage.xaml这个位址:

  

  请注意:若要使用 IsolatedStorageSettings类别必须引用 System.IO.IsolatedStorage命名空间才行喔!

  1using System.IO.IsolatedStorage;

  当然,你也可以定义多笔 UriMapper定义,来宣告其他页面的网址对应规则,或撰写更复杂的判断规则,如此一来整个 WP7 App的各种页面显示前转向的功能与判断逻辑就可以集中管理,也不失为一种好方法。

  学习总结:

  原来在 WP7的开发模式,要实作出「页面显示前就转向」也有这么些学问,果然跟我们一般在做网页开发时差异颇大。透过 UriMapper的操作技巧着实非常方便,如能更深入研究 Silverlight的巡览框架 (Navigation Framework)相信还能有其他的体悟。

  本文来自xutingzhou的博客,原文地址:http://blog.csdn.net/xutingzhou/article/details/8437219

WP8学习笔记:如何在页面显示前自动转向到其他页面的更多相关文章

  1. [Cocos2d-x for WP8学习笔记] HelloWorld结构分析

    先来看一下目录结构: Assets:游戏资源文件,图片音频等,Resource文件夹也有类似功能 include:用于放置游戏头文件 Shaders:渲染器着色器文件(大雾) cocos2dorig. ...

  2. [Cocos2d-x for WP8学习笔记] HelloWorld

    Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2. ...

  3. InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  4. blfs(systemv版本)学习笔记-编译安装ligtdm显示管理器

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! ligtdm带有显示管理器和登录器,参照我的笔记安装xorg和i3后安装lightdm,就可以组成一个简易的桌面环境了 下面是l ...

  5. tensorflow学习笔记(1)-基本语法和前向传播

    tensorflow学习笔记(1) (1)tf中的图 图中就是一个计算图,一个计算过程.                                       图中的constant是个常量 计 ...

  6. IDA Pro 权威指南学习笔记(七) - 其他 IDA 显示窗口

    默认情况下 IDA 不会打开这些窗口,可通过 View -> Open Subviews 命令打开 Strings 窗口(Strings) Strings 窗口中显示的是从二进制文件中提取出的一 ...

  7. [原创]java WEB学习笔记29:Cookie Demo 之自动登录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Sharepoint2013搜索学习笔记之自定义结果显示模板(九)

    搜索结果通过套用定义好的显示模板来展示结果,显示模板由js和html组成,我们可以通过修改显示模板,然后将修改好的显示模板跟搜索结果绑定起来,来修改搜索结果的显示效果,例子如下图: 修改前 修改后 第 ...

  9. angular学习笔记(八)-控制视图显示隐藏

    本篇介绍angular控制视图的显示和隐藏: 通过给元素添加ng-show属性或者ng-hide属性来控制视图的显示或隐藏: ng-show: 绑定的数据值为true时,显示元素,值为false时,隐 ...

随机推荐

  1. 浅谈C#多线程与UI响应

    www.educity.cn     发布者:shenywww                    来源:网络转载                     发布日期:2014年10月06日      ...

  2. Web开发基础(读书笔记)

    读书笔记:简单+基础 HTML(hyper Text Markup Language,超文本标记语言) URL(Uniform Resource Locator,统一资源定位器)构成3部分:协议/主机 ...

  3. ActiveMQ学习总结

    一.消息中间件的产生的背景 1.在网络通讯中,Http请求默认采用同步请求方式,基于请求与响应模式 2.在客户端与服务器进行通讯时,客户端调用服务端接口后,必须等待服务端完成处理后返回结果给客户端才能 ...

  4. 洛谷——P2421 A-B数对(增强版)

    题目背景 woshiren在洛谷刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈. 题目描述 给出N 个从小到大排好序的整 ...

  5. COW

    COW 时间限制: 1 Sec  内存限制: 64 MB提交: 41  解决: 18[提交][状态][讨论版] 题目描述 Bessie the cow has stumbled across an i ...

  6. HDU 6313: Hack it

    Hack It Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. Scrum 实施中遇到的典型问题

    Scrum实施过程中遇到的典型问题,答案综合了网络中的借鉴和自己实践中的体会. Q1:技术负债在敏捷团队中会快速的膨胀. A1:由于敏捷开发过程没有充足的事前(up-front)设计,技术负债是不可避 ...

  8. 某dalao贼快的hash?

    #include<map> #include<cstdio> #include<iostream> #include<ext/pb_ds/assoc_cont ...

  9. [APIO2015]巴厘岛的雕塑

    题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有 NN 座雕塑,为方便起见,我们把这些雕塑从 11 到 NN 连续地进行标号,其中第 ii 座雕塑的年龄是 Y ...

  10. [HNOI/AHOI2018]寻宝游戏

    题目大意: $n(n\le1000)$个$m(m\le5000)$位的二进制数,第$0$个数为$0$.用$\wedge$和$\vee$将这些数连接起来.$q(q\le1000)$次询问,每次给定一个$ ...