Windows Phone学习笔记:如何在页面显示前自动转向到其他页面
2012-12-26 08:04
399 查看
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
我们在设计一些需要登入才能使用的功能时,若使用者进入了会员才能使用的页面,就会在页面显示之前自动导向到另一个页面,这样的需求用 ASP.NET来实作是非常容易的,只要在页面的
Render方法执行之前来执行 Response.Redirect方法就可以了,非常直觉。但是开发环境切换到 WP7后才发现,要实作这个功能塬来没那么简单,你必须花点心思才能做到这样的需求。
在本次修练开始之前,我们除了预设的 MainPage页面外,也另外新增了一个 Login页面,如下图示:
MainPage.xaml页面长这样
Login.xaml页面长这样
因为我们的需求是要求使用者第一次使用 App时就先登入,所以我们必须在 MainPage显示之前就要强迫使用者导向到
Login页面。从我上一篇修练文章中可以看到我曾经用过 NavigationService来实作转向功能,如果你将转向的程式写在 Loaded事件裡
(如下程式码),那么使用者还是会先看到 MainPage的完整页面内容,然后才转向到 Login页面,虽然显示的时间非常短暂,只有
100 ~ 200ms而已,但使用者体验还是非常差,我们必须在页面显示前就转向到其他页面才行!
接着你一定会想说把程式码搬进 MainPage建构子不就好了?很抱歉!在
MainPage 建构子执行的这个时间点,NavigationService是无法使用的,如果你硬要这么做,就会出现以下错误:
我研究了一段时间后,其结论就是,这类「页面显示前就要转向」的需求不能在「页面层级」实现,必须到「应用程式」层级的地方来实现「显示前转向」需求,也就是在 App.xaml与
App.xaml.cs这个档案裡撰写一些程式码。
如果你曾经研究过 Silverlight的 Navigation框架,有可能会知道有个
UriMapper类别,可以用来做一些网址的路由对应,要在 WP7裡实现这样的功能,请参考以下设定步骤:
1.首先,我们先开起 App.xaml档案,并先新增一个
UriMapper命名空间
如下图示:
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)相信还能有其他的体悟。
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
我们在设计一些需要登入才能使用的功能时,若使用者进入了会员才能使用的页面,就会在页面显示之前自动导向到另一个页面,这样的需求用 ASP.NET来实作是非常容易的,只要在页面的
Render方法执行之前来执行 Response.Redirect方法就可以了,非常直觉。但是开发环境切换到 WP7后才发现,要实作这个功能塬来没那么简单,你必须花点心思才能做到这样的需求。
在本次修练开始之前,我们除了预设的 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 建构子执行的这个时间点,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> |
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)相信还能有其他的体悟。
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
相关文章推荐
- WP8学习笔记:如何在页面显示前自动转向到其他页面
- 【WPF学习笔记】之如何传递第一个登录界面的值到下一个页面显示:动画系列之(三)
- 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)
- 安卓智慧上海学习笔记系列——禁用ViewPager页面切换效果及不自动加载下一页数据
- OAF学习笔记-11-页面传值(传ID,显示为Name)
- OAF学习笔记-12- 从系统获取ID值,查出Name,在页面显示
- iOS学习笔记--如何使九宫格布局图片的显示自适应大小
- OAF学习笔记-18- Update后页面显示不是最新的数据的解决方法
- 如何让页面在打开时自动刷新一次让图片全部显示
- 如何使用汇编在dos界面上显示字体和颜色--学习心得笔记
- Qt学习笔记之图片显示(自动调整大小适应设计的范围)
- Django 开发学习笔记(7)- 开发特定主题显示的页面
- SilverLight学习笔记--Silverligh之如何显示用户自定义的 Splash Screen (初始屏幕)
- OAF学习笔记-12- 从系统获取ID值,查出Name,在页面显示
- OAF学习笔记-18- Update后页面显示不是最新的数据的解决方法
- 【CodeSmith学习笔记】:特殊字符如何包含在模板中和模板引用其他文件
- iOS学习笔记--如何实现登录按钮显示状态的改变
- java学习笔记(常量 二进制 其他进制 负数进制 变量 自动类型提升 强制类型转换 )
- mini-web学习笔记之经典CRUD显示页面总结
- OAF学习笔记-12- 从系统获取ID值,查出Name,在页面显示