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

本文深入解析应用启动与页面导航过程,包括App的初始化、OnLaunched方法的调用、MainPage页面的实例化及导航过程中的关键函数(OnNavigatedTo、OnNavigatingFrom、OnNavigatedFrom),以及程序进入后台后的行为。重点讨论了页面导航在Win8.1/Windows Phone 8.1平台上的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值