winrt下NavigatTo、NavigatedFrom、NavigatingFrom、Loaded运行先后次序

来源:互联网 发布:c语言实型用什么表示 编辑:程序博客网 时间:2024/05/22 10:33

当程序由不运行状态进入运行状态首先执行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方法

0 0
原创粉丝点击