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

  • 相关阅读:
    HDU 5492 Find a path
    codeforce gym 100548H The Problem to Make You Happy
    Topcoder SRM 144 Lottery
    codeforce 165E Compatible Numbers
    codeforce gym 100307H Hack Protection
    区间DP总结
    UESTC 1321 柱爷的恋爱 (区间DP)
    HDU 4283 You Are the One (区间DP)
    HDU 2476 String painter (区间DP)
    UESTC 426 Food Delivery (区间DP)
  • 原文地址:https://www.cnblogs.com/aureate-sunshine/p/4148557.html
Copyright © 2011-2022 走看看