WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...
生活随笔
收集整理的這篇文章主要介紹了
WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
很多時候我們需要在啟動程序的時候根據(jù)狀態(tài)改變初始導(dǎo)航頁面,比如程序在啟動的時候判斷用戶是否登錄,
如果未登錄則跳轉(zhuǎn)到LoginPage.xaml否則跳轉(zhuǎn)到MainPage界面。
這時候就要分析程序的啟動和導(dǎo)航的過程。
程序的啟動是App.xamlcs負(fù)責(zé)的。
App類的構(gòu)造器,里面就是一個App的初始化流程
1 public App() 2 { 3 // 未捕獲的異常的全局處理程序。 4 UnhandledException += Application_UnhandledException; 5 6 // 標(biāo)準(zhǔn) XAML 初始化 7 InitializeComponent(); 8 9 // 特定于電話的初始化 10 InitializePhoneApplication(); 11 12 // 語言顯示初始化 13 InitializeLanguage(); 14 15 // 調(diào)試時顯示圖形分析信息。 16 if (Debugger.IsAttached) 17 { 18 // 顯示當(dāng)前幀速率計數(shù)器。 19 Application.Current.Host.Settings.EnableFrameRateCounter = true; 20 21 // 顯示在每個幀中重繪的應(yīng)用程序區(qū)域。 22 //Application.Current.Host.Settings.EnableRedrawRegions = true; 23 24 // 啟用非生產(chǎn)分析可視化模式, 25 // 該模式顯示遞交給 GPU 的包含彩色重疊區(qū)的頁面區(qū)域。 26 //Application.Current.Host.Settings.EnableCacheVisualization = true; 27 28 // 通過禁用以下對象阻止在調(diào)試過程中關(guān)閉屏幕 29 // 應(yīng)用程序的空閑檢測。 30 // 注意: 僅在調(diào)試模式下使用此設(shè)置。禁用用戶空閑檢測的應(yīng)用程序在用戶不使用電話時將繼續(xù)運行 31 // 并且消耗電池電量。 32 PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; 33 } 34 35 }?其中的InitializePhoneApplication() 就有頁面導(dǎo)航的相關(guān)處理
1 // 請勿向此方法中添加任何其他代碼 2 private void InitializePhoneApplication() 3 { 4 if (phoneApplicationInitialized) 5 return; 6 7 // 創(chuàng)建框架但先不將它設(shè)置為 RootVisual;這允許初始 8 // 屏幕保持活動狀態(tài),直到準(zhǔn)備呈現(xiàn)應(yīng)用程序時。 9 RootFrame = new PhoneApplicationFrame(); 10 RootFrame.Navigated += CompleteInitializePhoneApplication; 11 12 // 處理導(dǎo)航故障 13 RootFrame.NavigationFailed += RootFrame_NavigationFailed; 14 15 // 在下一次導(dǎo)航中處理清除 BackStack 的重置請求, 16 RootFrame.Navigated += CheckForResetNavigation; 17 18 // 確保我們未再次初始化 19 phoneApplicationInitialized = true; 20 } 由于他的重要性,微軟在開頭提醒我們不要添加任何其他代碼,以免導(dǎo)致程序無法啟動。但是我們?yōu)榱诉_(dá)到目的,只能選擇無視之╮(╯-╰)╭示意圖:
在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在任何頁面進(jìn)行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中默認(rèn)的導(dǎo)航頁,把他改成LoginPage.xaml。
然后就大功告成啦。o(^▽^)o
作者:陽光是金色的
出處:http://www.cnblogs.com/aureate-sunshine/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
轉(zhuǎn)載于:https://www.cnblogs.com/aureate-sunshine/p/4148557.html
總結(jié)
以上是生活随笔為你收集整理的WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上古卷轴5周年纪念版有什么区别?
- 下一篇: 初代天仙刘亦菲VS二代天仙杨采钰,作为演