生命周期

如果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. c++控制台程序实现定时器

    #include "stdafx.h" #include <iostream> #include <Windows.h> using namespace s ...

  2. iOS 阶段学习第九天笔记(内存管理)

    iOS学习(C语言)知识点整理 一.内存管理 1)malloc , 用于申请内存; 结构void *malloc(size_t),需要引用头文件<stdlib.h>:在堆里面申请内存,si ...

  3. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...

  4. 速战速决 (2) - PHP: 数据类型 bool, int, float, string, object, array

    [源码下载] 速战速决 (2) - PHP: 数据类型 bool, int, float, string, object, array 作者:webabcd 介绍速战速决 之 PHP 数据类型 boo ...

  5. jquery练习(一次性赋予多个属性值)

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

  6. mysql命令行基本操作

    开启:打开电脑的“开始”菜单栏,找到“运行”,在运行框中直接输入:net start mysql.再 登录:Mysql  -P 端口号  -h  mysql主机名\ip -u root (用户)  - ...

  7. form表单

      <form> <input type="text" value="123">   文本输入框,value值为显示在文本框中的默认值, ...

  8. tomcat jdk servlet websocket版本对应关系

    最近在考虑公司主要基础三方库版本统一和升级的问题,特看了下tomcat jdk servlet websocket版本的对应关系,如下:

  9. java内存模型-final

    与前面介绍的锁和 volatile 相比较,对 final 域的读和写更像是普通的变量访问.对于final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写入,与随后把 ...

  10. Java基础学习总结--对象容器

    目录: ArrayList 顺序泛型容器 HashSet 集合容器 HashMap<Key,Value>容器 要用Java实现记事本的功能.首先列出记事本所需功能: 可以添加记录(字符串) ...