生命周期

如果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学习之路(九)导航和页面(续)的更多相关文章

  1. WPF学习之路(八)页面

    传统的应用程序中有两类应用程序模式:桌面应用,Web应用.WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序 WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序 ...

  2. WPF学习之路(二) XAML(续)

    属性 简单属性 前面用到的Width/Height都是简单属性,其赋值一定要放到双引号里 XAML解析器会根据属性的类型执行隐式转换 与C#的区别 SolidBrush.Color = Colors. ...

  3. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  4. springboot 学习之路 7(静态页面自动生效问题)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  5. WPF学习之路(九)导航链接

    Hyperlink WPF中超链接类型是Hyperlink,除了能在页面之间导航,还能再同一个页面下进行段落导航 实例: <Grid> <FlowDocumentReader> ...

  6. WPF学习之路(十)实例:用户注册

    通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类  User.cs public class User { private string name; public string Na ...

  7. WPF学习之路(四)路由

    路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...

  8. WPF学习之路(二) XAML

    在WPF中引入了XAML语言,主要用于界面设计,业务逻辑则使用C#实现后台代码,将界面设计与业务逻辑分离 XAML是一种声明式语言,类似XML\HTML 示例: <!--Start Tag--& ...

  9. WPF学习之路(一) 初识WPF

    参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(W ...

随机推荐

  1. max server memory

    MS SQL Server 2008 R2,主要是用作ERP的数据库,但它的内存使用率非常高: 经查资料,原来数据库有默认的情况之下,使用内存时它是尽可能使用完有效内存.如果你不想这样,你可以手动分配 ...

  2. Web API配置自定义路由

    默认访问Web API时,是无需指定method名.它会按照默认的路由来访问.如果你的Web API中出现有方法重载时,也许得配置自定义路由: 标记1为自定义路由,标记2为默认路由,需要把自定义路由排 ...

  3. ASP.NET Core开发-读取配置文件Configuration

    ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...

  4. C#中协变与抗变(逆变)

    泛型在.NET 2.0中正式的引入.在使用泛型的过程中,联系上面向对象的继承性.往往很容易想当然敲出类似以下代码 List<Animal> animalLst=new List<Do ...

  5. ASP.NET里的Session详细解释

    Session模型简介 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器建立连 ...

  6. 词法分析程序 LEX和VC6整合使用的一个简单例子

    词法分析的理论知识不少,包括了正规式.正规文法.它们之间的转换以及确定的有穷自动机和不确定的有穷自动机等等... 要自己写一个词法分析器也不会很难,只要给出了最简的有穷自动机,就能很方便实现了,用if ...

  7. .net IO异步和Producer/Consumer队列实现一分钟n次http请求

    简介 最近工作中有一个需求:要求发送http请求到某站点获取相应的数据,但对方网站限制了请求的次数:一分钟最多200次请求. 搜索之后,在stackoverflow网站查到一个类似的问题..但里面用到 ...

  8. jquery可见性选择器(匹配所有隐藏的元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 数据操作语言DML与运算符

    数据操作语言DML(添加,修改,删除) 1.添加数据 insert into insert into 表名 (字段列表) values (值列表),值列表要和字段列表按顺序匹配. insert int ...

  10. Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...