WPF学习之路(九)导航和页面(续)
生命周期
如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始。随后创建Page2对象,并且触发NavigationProgress事件。该事件用于提供导航进度信息,每次返回1KB数据就会引发该事件。随后触发Navigated事件,LoadCompleted紧随其后,这时表明页面已经下载完毕。Page1触发UnLoaded事件,宣告其结束。Page2触发Loaded事件,表明其开始。
实例(取自《葵花宝典--WPF自学手册》)
App.xaml
<Application x:Class="Alex_WPFAPPDemo07.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Navigating="Application_Navigating"
NavigationFailed="Application_NavigationFailed"
Navigated="Application_Navigated"
NavigationProgress="Application_NavigationProgress"
NavigationStopped="Application_NavigationStopped"
LoadCompleted="Application_LoadCompleted"
FragmentNavigation="Application_FragmentNavigation"
StartupUri="CustomPage.xaml">
<Application.Resources>
<Style TargetType="TextBlock">
<Setter Property="FontSize" Value="" />
<Setter Property="Margin" Value="" />
</Style>
</Application.Resources>
</Application>
App.xaml.cs
public partial class App : Application
{
private void Application_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_Navigating\n");
System.Console.WriteLine("导航页面的Uri:" + e.Uri.ToString());
} private void Application_NavigationFailed(object sender, System.Windows.Navigation.NavigationFailedEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_NavigationFailed\n");
System.Console.WriteLine("失败的异常是: " + e.Exception.ToString());
// Handled属性设置为true,从而防止异常继续上传转变为一个未处理的应用程序异常
e.Handled = true;
} private void Application_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_Navigated\n");
System.Console.WriteLine("导航页面的Uri:" + e.Uri.ToString());
} private void Application_NavigationProgress(object sender, System.Windows.Navigation.NavigationProgressEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_NavigationProgress\n");
System.Console.WriteLine("导航页面的Uri:" + e.Uri.ToString());
System.Console.WriteLine("已经得到的字节数为{0}", e.BytesRead);
} private void Application_NavigationStopped(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_NavigationStopped\n");
System.Console.WriteLine("导航页面的Uri:" + e.Uri.ToString());
} private void Application_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_LoadCompleted\n");
System.Console.WriteLine("导航页面的Uri:" + e.Uri.ToString());
} private void Application_FragmentNavigation(object sender, System.Windows.Navigation.FragmentNavigationEventArgs e)
{
System.Console.WriteLine("------------------------------------------");
System.Console.Write("触发的事件为:Application_FragmentNavigation\n");
System.Console.WriteLine("导航的段落为:" + e.Fragment);
}
}
修改工程的Output type属性

效果如下图

在控制台输出中可以看到导航的整个过程都经过了哪些事件的处理
To be continue...
WPF学习之路(九)导航和页面(续)的更多相关文章
- WPF学习之路(八)页面
传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 ...
- WPF学习之路(二) XAML(续)
属性 简单属性 前面用到的Width/Height都是简单属性,其赋值一定要放到双引号里 XAML解析器会根据属性的类型执行隐式转换 与C#的区别 SolidBrush.Color = Colors. ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- springboot 学习之路 7(静态页面自动生效问题)
目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...
- WPF学习之路(九)导航链接
Hyperlink WPF中超链接类型是Hyperlink,除了能在页面之间导航,还能再同一个页面下进行段落导航 实例: <Grid> <FlowDocumentReader> ...
- WPF学习之路(十)实例:用户注册
通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类 User.cs public class User { private string name; public string Na ...
- WPF学习之路(四)路由
路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...
- WPF学习之路(二) XAML
在WPF中引入了XAML语言,主要用于界面设计,业务逻辑则使用C#实现后台代码,将界面设计与业务逻辑分离 XAML是一种声明式语言,类似XML\HTML 示例: <!--Start Tag--& ...
- WPF学习之路(一) 初识WPF
参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(W ...
随机推荐
- javascript类型注意事项
以下是javascript类型的注意事项: null:表示尚未存在的对象,注意,尽管尚未存在,也是个对象啊,所以用typeof检测一个null值变量的结果是Object:不过,为了便于写if语句,在j ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- 其实Unix很简单
很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验.在绝大多数时候,我发现问这些问题的朋友都有两个特点: 1)对Unix有 ...
- C#编程总结(八)数字签名
C#编程总结(八)数字签名 在日常工作中,有很多文件需要领导审阅.签名和盖章,由于公司业务开展,跨地域.跨国业务也日益普遍,领导签名盖章变得很麻烦,开始的时候人们通过邮寄.传真等方式来解决,但是耗费时 ...
- 走进异步世界:EnyimMemcached异步化改造引起的内存泄漏
6月30日我们发布了异步化改造后的博客程序之后,出现了高内存.高CPU.高线程数的不理想情况. 经过一周的追查,终于水落日出——引起不理想情况的根源是我们修改过的EnyimMemcached代码存在内 ...
- CodeSmith连接Oracle
Win7上仅安装了Oracle32位客户端,此时CodeSmith无法连接Oracle数据库. 解决方法一:如果同一台电脑安装了Oracle64位数据库,这样CodeSmith可以连接数据库. 解决方 ...
- script加载文件
- IO流(一)__File对象和字符流FileWriter FileReader
IO流:IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出 流分为字节流和字符流字符流的由来:其实就是字节流读取文字字节 ...
- ASP.NET MVC Model绑定的简单应用
Model绑定是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程. 一.简单类型 1.单一值
- Dom Animator – 提供 Dom 注释动画的 JS 库
DOM 动画是一个极好的 JavaScript 库,用来在页面的 DOM 注释中显示小的 ASCII 动画.这对于那些检查你的代码的人是一个小彩蛋,仅此而已.它是一个独立的库,不依赖 jQuery 或 ...