生命周期

如果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. PHP函数microtime()

    定义和用法    PHP函数microtime()返回当前 Unix 时间戳和微秒数.PHP函数microtime()语法    microtime(get_as_float)PHP函数microti ...

  2. 15天玩转redis —— 第五篇 集合对象类型

    这篇我们来看看Redis五大类型中的第四大类型:“集合类型”,集合类型还是蛮有意思的,第一个是因为它算是只使用key的Dictionary简易版, 这样说来的话,它就比Dictionary节省很多内存 ...

  3. .net用SQL Server进行session会话管理

    保存在内存中的session经常由于dll的变动导致丢失.有一种方法可以长期保存session,那就是session的SqlServer模式. ASP.NET允许将会话数据存储到一个数据库服务器中,方 ...

  4. 【Java每日一题】20161118

    package Nov2016; public class Ques1118 { public static final int NUM = 10000000; public static void ...

  5. 动态加载HTML后使用query修改标签样式

    下面的IMG 标签的宽度从后台返回是10PX,加载完毕后,修改成100PX,注意:拼接的代码在 body标签之后,或则直接在HTML外面增加也可以 <html> <head> ...

  6. Extjs 窗体居中,双重窗体弹出时清除父窗体的鼠标事件

    这个是监控窗体缩放的事件 缩放中居中主要在 'beforeshow' 和 'destroy'两个事件里面监控 var EditTempWindow; Ext.EventManager.onWindow ...

  7. springmvc 配置多视图,返回jsp,velocity,freeMarker,tiles(模板)等等

    springmvc-servlet.xml配置 <!-- Velocity --> <bean id="velocityViewResolver" class = ...

  8. 你知道url中的特殊符号含义么

    1.# #代表网页中的一个位置.其右面的字符,就是该位置的标识符.比如,http://www.example.com/index.html#print就代表网页index.html的print位置.浏 ...

  9. 泛函编程(4)-深入Scala函数类

    既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...

  10. 市面上常见的javaEE WEB服务软件

    常见的市面上web服务软件 Tomcat:轻量级的WEB应用程序服务器(开源),开源组织Apache的产品.免费的.支持部分的JavaEE规范.(servlet.jsp.jdbc,但ejb, rmi不 ...