当程序由不运行状态进入运行状态首先执行App的初始化工作,也就是App.xaml.cs的实例化
当App实例化成功之后由会自动调用App.OnLaunched方法
而OnLaunched中
if(!rootFrame.Navigate(typeof(MainPage), e.Arguments))
{
throw new Exception("Failed to create initial page");
}
就是导航最先开始的地方,它首先会实例化MainPage页面,调用MainPage.xaml.cs中的构造函数
当MainPage页面初始化完毕,App会进入后台则算开始了正式的导航
在win8.1/wp8.1中页面导航有3个触发函数
OnNavigatedTo、OnNavigatingFrom、OnNavigatedFrom
第一个To函数是导航到哪个页面,就执行哪个页面的To函数
OnNavigatingFrom和OnNavigatedFrom都是是触发导航之前的页面的函数,这2个函数不会因为页面或程序进入后台而触发(比如点击win键)
OnNavigatingFrom是当导航开始但是还没有发生就会触发,而OnNavigatedFrom是导航结束才会触发
所以以上从网上下依次为
1、App() App的初始化
2、App.Launched App开始运行,可以理解为激活
3、App.OnNavigatingFrom 准备开始导航,也是程序第一次开始导航,只会触发一次(可以在App.Launched中添加如下rootFrame.Navigating += this.RootFrame_FirstNavigating;这个一般系统不会自动添加)
4、MainPage() 假如App.Launched中设置首页为MainPage的话,构造函数,假如缓存模式设置为disabled每一次导航都会重新实例化这个对象,假如设置为enable或者required则不会
5、App.OnNavigatedFrom 导航后触发的函数,这个函数程序只会触发一次,因为在App中
6、MainPage.OnNavigateTo 导航完成触发的函数
7、Loaded 假如Xaml中Page控件中指定了Loaded函数
假如Page1到Page2的导航所执行的顺序为
Page1的OnNavigatingFrom
实例化Page2,假如为NavigatedCacheMode = disabled; 假如为required则没有这一步
Page1的OnNavigatedFrom
Page2的OnNavigateTo
Page2的Loaded,假如指定了Loaded,否则没有这一步
注意,将程序退到后台并不会触发OnNavigatedFrom、OnNavigatingFrom、OnNavigateTo方法