.NET WPF教程(3)——Application介绍(续)

接上文WPF教程系列(2)——Application介绍,我们继续来学习Application

三、WPF应用程序的关闭

WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序才停止运行。 ShutDown 是隐式或显式发生,可以通过指定 ShutdownMode 的属性值来进行设置。

ShutdownMode选项
OnLastWindowClose(默认值):应用程序关闭时,或最后一个窗口关闭时关闭,或调用Application对象的Shutdown() 方法时,应用程序关闭。
OnMainWindowClose启动窗体关闭或调用Application对象的Shutdown()方法时,应用程序关闭。(和C#的Windows应用程序的关闭模式比较类似)
OnExplicitShutdown只有在调用Application对象的Shutdown()方法时,应用程序才会关闭。
  1. 对ShutdownMode选项的更改,可以直接在App.xaml中更改,如下代码。
    <Application x:Class="WpfApp1.App"
    
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"            
    
                 StartupUri="MainWindow.xaml" ShutdownMode="OnExplicitShutdown" >
    
        <Application.Resources>
    
            
    
        </Application.Resources>
    
    </Application>
    
  2. 在代码文件(App.xaml.cs)中修改ShutdownMode选项,但必须注意这个设置要写在app.Run()方法之前 ,如下代码。
     app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
     app.Run(win);
    
    Application对象的其他属性:
    名称说明
    Current获取当前 AppDomain的 Application 对象。
    Dispatcher获取与此 DispatcherObject 关联的 Dispatcher。 (继承自 DispatcherObject。)
    MainWindow获取或设置应用程序的主窗口。
    Properties获取应用程序范围的属性集合。
    ResourceAssembly获取或设置对于 WPF 应用程序的资源提供已装箱统一资源标识符 (URI) 的 Assembly 。
    Resources获取或设置应用程序范围资源的集合,例如样式和画笔。
    ShutdownMode获取或设置会导致 Shutdown 方法调用的情况。
    StartupUri获取或设置自动显示的 UI ,当应用程序启动时。
    Windows获取在应用程序中实例化窗口。

四、添加Application对象事件

名称说明
Activated当应用程序成为前台应用程序时触发。
Deactivated当应用程序不再是前台应用程序时触发。
DispatcherUnhandledException如果异常是由应用程序引发,但未处理,触发。
Exit在应用程序关闭之前,触发,而且不能撤消。
FragmentNavigation发生在应用程序的一个浏览器启动导航到内容片段导航时,会立即发生,如果所需片段在当前目录,或者,在源 XAML 目录加载后,如果所需片段在其他内容。
LoadCompleted在导航到在应用程序中的一个浏览器的目录加载的分析完成并已呈现时触发。
Navigated当导航到在应用程序中使用的浏览器已找到的内容时触发,这时它可能还没有完成加载。
Navigating在一个新的导航由应用程序,一个浏览器请求发生。
NavigationFailed出现问题,则错误,当应用程序的一个浏览器导航到所请求的内容时。
NavigationProgress定期发生在应用程序中使用浏览器管理提供导航进度信息的下载过程。
NavigationStopped发生在一个浏览器的 StopLoading 方法在应用程序的调用,或者,如果新的导航由浏览器请求,在当前导航正在进行的。
SessionEnding当用户在注销或关闭操作系统关闭 Windows 会话时发生。
Startup当 Application 对象的 Run 方法调用,发生。

在应用程序中添加事件的方式有如下三种。
第一种方式:

  1. 在App.xaml中做事件的绑定,在App.xaml.cs文件中添加事件的处理方法
    在App.xaml文件中,具体添加方法见下图。
    在这里插入图片描述
  2. 添加完事件之后的app.xml文件代码如下
    <Application x:Class="WpfApp1.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml" ShutdownMode="OnExplicitShutdown" Activated="Application_Activated" Exit="Application_Exit">
        <Application.Resources>
        </Application.Resources>
    </Application>
    
  3. 在App.xaml.cs文件的代码如下:
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace WpfApp1
    {
        /// <summary>
        /// App.xaml 的交互逻辑
        /// </summary>
        public partial class App : Application
        {
            private void Application_Activated(object sender, EventArgs e)
            {
    
            }
            private void Application_Exit(object sender, ExitEventArgs e)
            {
            
            }
        }
    }
    
  4. 在使用以上方式添加事件之后,如果在Visual Studio中按F5 执行应用程序时,报以下错误“不包含适合于入口点的静态‘Main’方法”。这个错误是由于Visual Studio把项目文件(*.csproj)中原来自动生成的app.xaml相关的定义进行了修改。具体区别如下:
    1. 直接新建的WPF项目中的有关App.xaml的定义如下:
      <ApplicationDefinition Include="App.xaml">
            <Generator>MSBuild:Compile</Generator>
            <SubType>Designer</SubType>
      </ApplicationDefinition>
      
    2. Visual Studio把修改后的App.xaml的配置代码如下:
      <Page Include="App.xaml">
            <SubType>Designer</SubType>
            <Generator>MSBuild:Compile</Generator>
      </Page>
      
    第一段代码中App.xaml在项目文件里面用ApplicationDefinition标签定义。第二段代码中App.xaml在项目文件里面用Page标签定义,这种定义是指App.xaml只是一个页面而已。
     因此,只需要把项目文件中将App.xaml的配置由Page修改成ApplicationDefinition即可。

第二种方式:

  1. 可以像是在WinForm中的Program类中写Main方法一样,在WPF中一样可以自定义一个app类中写main及其他相关事件。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace WpfApp1
    {
        class App
        {
     		[STAThread]
            static void Main()
            {
                // 定义Application对象作为整个应用程序入口 
                Application app = new Application();
                MainWindow win = new MainWindow();
                app.ShutdownMode = ShutdownMode.OnMainWindowClose;
                app.MainWindow = win;
                //是必须的,否则无法显示窗体      
                win.Show();
                app.Run();
                app.Activated += app_Activated;
                app.Exit += app_Exit;
            }
    		static void app_Activated(object sender, EventArgs e)
    		{
    		    throw new NotImplementedException();
    		}
    		static void app_Exit(object sender, ExitEventArgs e)
    		{
    		    throw new NotImplementedException();
    		}
        }
    }
    

第三种方式:

  1. 在App.xaml界面中,如下图位置1处,输入Exit事件名称,Visual Studio 2013会弹出一个菜单“新建事件处理程序”,双击这个菜单,Visual Studio 2013就会自动创建一个“Application_Exit”事件,如下图位置2处。
    在这里插入图片描述

五、WPF应用程序生存周期

WPF应用程序的生命周期与执行顺序,用MSDN上的一张图片进行说明。下图显示了窗口的生存期中的主体事件的顺序。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值