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

来源:互联网 时间:1970-01-01

 

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

如果未登录则跳转到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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。




相关阅读:
Top