• 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="15" />
                <Setter Property="Margin" Value="5" />
            </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
    ");
            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
    ");
            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
    ");
            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
    ");
            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
    ");
            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
    ");
            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
    ");
            System.Console.WriteLine("导航的段落为:" + e.Fragment);
        }
    }

    修改工程的Output type属性

    效果如下图

     在控制台输出中可以看到导航的整个过程都经过了哪些事件的处理

    To be continue...

  • 相关阅读:
    A survey of best practices for RNA-seq data analysis RNA-seq数据分析指南
    DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器
    中科院生物信息学题目整理
    生物信息学题目整理: 陈润生
    第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8
    第七章 资源在Windows编程中的应用 P157 7-8
    第四章 Windows的图形设备接口及Windows绘图 P83 4-6
    Android Fragment 你应该知道的一切
    Android Fragment 真正的完全解析(下)
    Android Fragment 真正的完全解析(上)
  • 原文地址:https://www.cnblogs.com/alex09/p/4441497.html
Copyright © 2020-2023  润新知