WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...

 

很多时候我们需要在启动程序的时候根据状态改变初始导航页面,比如程序在启动的时候判断用户是否登录,

如果未登录则跳转到LoginPage.xaml否则跳转到MainPage界面。

这时候就要分析程序的启动和导航的过程。

程序的启动是App.xamlcs负责的。

App类的构造器,里面就是一个App的初始化流程

 1 public App()
 2         {
 3             // 未捕获的异常的全局处理程序。
 4             UnhandledException += Application_UnhandledException;
 5 
 6             // 标准 XAML 初始化
 7             InitializeComponent();
 8 
 9             // 特定于电话的初始化
10             InitializePhoneApplication();
11 
12             // 语言显示初始化
13             InitializeLanguage();
14 
15             // 调试时显示图形分析信息。
16             if (Debugger.IsAttached)
17             {
18                 // 显示当前帧速率计数器。
19                 Application.Current.Host.Settings.EnableFrameRateCounter = true;
20 
21                 // 显示在每个帧中重绘的应用程序区域。
22                 //Application.Current.Host.Settings.EnableRedrawRegions = true;
23 
24                 // 启用非生产分析可视化模式,
25                 // 该模式显示递交给 GPU 的包含彩色重叠区的页面区域。
26                 //Application.Current.Host.Settings.EnableCacheVisualization = true;
27 
28                 // 通过禁用以下对象阻止在调试过程中关闭屏幕
29                 // 应用程序的空闲检测。
30                 //  注意: 仅在调试模式下使用此设置。禁用用户空闲检测的应用程序在用户不使用电话时将继续运行
31                 // 并且消耗电池电量。
32                 PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
33             }
34 
35         }

 其中的InitializePhoneApplication() 就有页面导航的相关处理

 1  // 请勿向此方法中添加任何其他代码
 2         private void InitializePhoneApplication()
 3         {
 4             if (phoneApplicationInitialized)
 5                 return;
 6 
 7             // 创建框架但先不将它设置为 RootVisual;这允许初始
 8             // 屏幕保持活动状态,直到准备呈现应用程序时。
 9             RootFrame = new PhoneApplicationFrame();
10             RootFrame.Navigated += CompleteInitializePhoneApplication;
11 
12             // 处理导航故障
13             RootFrame.NavigationFailed += RootFrame_NavigationFailed;
14 
15             // 在下一次导航中处理清除 BackStack 的重置请求,
16             RootFrame.Navigated += CheckForResetNavigation;
17 
18             // 确保我们未再次初始化
19             phoneApplicationInitialized = true;
20         }
由于他的重要性,微软在开头提醒我们不要添加任何其他代码,以免导致程序无法启动。但是我们为了达到目的,只能选择无视之╮(╯-╰)╭
示意图:

在InitializePhoneApplication()里面加入RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating);
给navigating事件添加自己写的Handler

NavigatingCancelEventHandler:
 1 void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
 2         {
 3             if (e.Uri.ToString().Contains("LoginPage.xaml") && isLogined())
        //这里一定要有判断条件,因为RootFrame在任何页面进行Navigate的时候都会掉用Navigating,或者采用跟RootFrame.Navigated 方式一样的递归方法 4 { 5 e.Cancel = true;//取消事件 6 string uriString = "/MainPage.xaml"; 7 Uri ur = new Uri(uriString, UriKind.Relative); 8 App.RootFrame.Dispatcher.BeginInvoke(delegate 9 { 10 App.RootFrame.Navigate(ur); 11 }); 12 } 13 }
最后一点,就是修改WMAppManifest.xml中默认的导航页,把他改成LoginPage.xaml。


然后就大功告成啦。o(^▽^)o


作者:阳光是金色的
出处:http://www.cnblogs.com/aureate-sunshine/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/aureate-sunshine/p/4148557.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6.数组和Hash表

当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组。 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-is操作符来判断是否是个数组&#xff0…

160 - 26 Colormaster

环境 Windows xp sp3 查壳 无壳的VB程序 测试: 输入 Name:123456 Serial:12345 字符串搜索,找到判断位置。 判断Name的长度要大于等于5: 00402CBC . 33C9 xor ecx,ecx 00402CBE . 83F8 04 cmp eax,0x4 00…

Android 菜单(OptionMenu)大全 建立你自己的菜单

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)&#…

160 - 27 Cosh.1

环境 Windows XP sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 弹出这个: 是一个CD-CHECK保护的程序。 字符串搜索,一下子就能来到这里: 0040121A . 68 9C304000 push Cosh_1.0040309C …

什么时候加上android.intent.category.DEFAULT

1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。 Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: Intent intent new Intent(this, B.class) Implicit Intent没有明确的指…

[BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来。。Orz 使用 DP 倍增 ,用状态 f[…

oracle创建表空间

注意点: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如【D:\oracle\oradata\Oracle9i\】也就是你要保存文件的路径存在 /*分为四步 */ /*第1步:创建临时表空间 */ create tempor…

160 - 28 CoSH.2

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 输入 Nmae:123456 Serial:12345 点击“CHECK”后弹出错误提示的消息框,然后程序自己结束掉 依然是字符串搜索: 004014DB . 8B1D FC214000 mov ebx,dword ptr ds…

负载均衡情况下获取真实ip的方法

公司用了硬件负载均衡,最近发现日志中的用户ip都为负载均衡器的ip,业务需要所以要改为用户真实ip,下面记录一下! 1、打开文件:/etc/httpd/conf/httd.conf。2、在文件中查找:”CustomLog”,找到如下配置块: …

ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 下一节:ASP.NET MVC5 EF6 入门教程 (6) View中的Razor使用 源码下载:点我下…

160 - 29 cosh.3

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 字符串搜索&#xff1a; 004014F5 |. E8 AA030000 call <jmp.&MFC42.#CWnd::GetWindowTextLengthA_> 004014FA |. 8945 EC mov [local.5],eax 004014FD |. 837D EC 0…

hdu--4902--线段树

题意 前面一段废话 这题 最有意思的应该是出题人 是clj 这题的时限放的太宽了 给了15s 我也是醉了 区间更新。 1 #include <iostream>2 #include <algorithm>3 using namespace std;4 5 const int size 200010;6 int a[size];7 struct data8 {9 int L , R ,…

(五) 面向对象类设计原则

1. 开闭原则&#xff08;the Open Closed Principle OCP&#xff09; 一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法&#xff0c;是软件工程 设计…

160 - 30 cracking4all.1

环境 Windows XP sp3 工具 exeinfope ollydbg 查壳 无壳的VB程序 测试 这个serial藏得比较里面&#xff0c;多点几下才能看到 字符串搜索&#xff1a; 00403338 . 50 push eax ; /var18 00403339 . 51 …

java2s.com

http://www.java2s.com/Code/JavaAPI/CatalogJavaAPI.htm转载于:https://www.cnblogs.com/reborn2012/p/3326445.html

MVC5 + EF6 入门完整教程

MVC5 EF6 入门完整教程 原文:MVC5 EF6 入门完整教程第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比&#xff0c;增加了很多"约定"。 直接讲这些 "约定" 会让人困惑&#xff0c;而且东西太多容易忘记。 和微软官方教程不同&#xff0c…

160 - 31 cracking4all.2

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 无壳VB程序 测试 输入1234567 OD载入字符串搜素&#xff0c;往上翻就看到这里&#xff0c;我截取部分片段&#xff1a; 00402C26 . 8D55 98 lea edx,dword ptr ss:[ebp-0x68] ; 取serial长度…

stm32的DFU使用方法

stm32的dfu看上去是个很高级的东西&#xff0c;似乎可以通过USB给内部flash、外部spi flash、外部nor等东西刷写数据、把数据读出来&#xff0c;但是用了一下感觉确实有点麻烦。 先不管原理是怎样的&#xff0c;使用方法是这样&#xff1a; 1、先下载这个Dfuse&#xff0c;然后…

160 - 32 genocide1

环境 Windows xp sp3 工具 upx exeinfope ollydbg 查壳 发现是upx壳&#xff0c;手脱的话会不干净&#xff0c;影响OD分析。 所以就直接用 upx -d 脱了 手脱&#xff1a; upx -d: 用upx -d 脱的版本进行分析。 第一次运行时显示这个&#xff1a; 缺少Reg.dat…

vector function trmplate

/*vectorfunction templateprogrammer:qpz */ #include <iostream> #include <vector> #define MAX 10 using namespace std; class Myclass{ private:vector <int> vel;//可均分的动态数组 public:void Add(int x){vel.push_back(x);}void print(); }; void…