接上文WPF入门教程系列二——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上的一张图片进行说明。下图显示了窗口的生存期中的主体事件的顺序。

转载于:https://www.cnblogs.com/Im-Victor/p/10564995.html

WPF入门教程系列三——Application介绍(续)相关推荐

  1. WPF入门教程系列四——Dispatcher介绍

    WPF入门教程系列四--Dispatcher介绍 一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还 ...

  2. 【转】WPF入门教程系列六——布局介绍与Canvas(一)

    从这篇文章开始,我们将对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引用户使用,而且没有漂亮的界面,那么普通用户会 ...

  3. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置bindi ...

  4. WPF入门教程系列十三——依赖属性(三)

    四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装中,经常会对那些希望暴露给外界只读操作的字段封装成只读属性,同样在WPF中也提供了只读属性的概念,如一些 WPF控件的依赖属性是只 ...

  5. WPF入门教程系列(1)----基础

    一.前言 最近找了一个实习,需要学习WPF,由于之前对这门语言没有任何了解,所以就网上找大牛的博客作为入门基础,为了让自己更加熟悉,我选择了自己边学习边写博客,为了自己同时也为了方便以后他人的学习. ...

  6. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽 ...

  7. WPF入门教程系列(4)

    上一篇博客中介绍了Application,其实还没介绍完,但是,突然发现了一个很好的博客,原文网址:https://www.cnblogs.com/wzh2010/p/6285990.html,所以接 ...

  8. WPF入门教程系列十四——依赖属性(四)

    六.依赖属性回调.验证及强制值 我们通过下面的这幅图,简单介绍一下WPF属性系统对依赖属性操作的基本步骤: 借用一个常见的图例,介绍一下WPF属性系统对依赖属性操作的基本步骤: 第一步,确定Base ...

  9. WPF入门教程系列十九——ListView示例(一)

    经过前面的学习,今天我做一个比较综合的WPF程序示例,主要包括以下功能: 1) 查询功能.从数据库(本地数据库(local)/Test中的S_City表中读取城市信息数据,然后展示到WPF的Windo ...

最新文章

  1. 乏善可陈的Neuralink
  2. Uber致人死亡或为自动驾驶肇事责任 没有判例可循
  3. Cannot create a session after the response has been committed
  4. 复制linux内核,linux内核写时复制机制源代码解读
  5. 奥迪坚SVRM(Screen-Voice Recording Manager)录屏软件正式发布
  6. 1007. Maximum Subsequence Sum (25)
  7. Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问
  8. python输出最大值与最小值求成绩平均值_Python第3次作业
  9. 一加7T Pro最新渲染图曝光:背部有小改动
  10. 解决Node.js 运行的时候出现中文乱码问题
  11. .net|dotnet应聘人员应该掌握的知识点
  12. Data Structures(Chapter 3 of The Algorithm Design Manual)
  13. 网络工程师的机会在哪里
  14. C语言源代码编译全过程
  15. ImgURL一款简单纯粹的图床程序源码
  16. 核燃料干式储存容器市场现状及未来发展趋势
  17. 1 天卖 1.96 亿,知识付费浪潮下的喜马拉雅是如何做增长的
  18. java输出字符串的长度_Java格式化字串输出固定长度
  19. 杰理之AD15怎么动态设置睡眠唤醒参数?【篇】
  20. php期末设计总结,PHP设计模式总结

热门文章

  1. 单片机光敏电阻控制蜂鸣器_走进单片机|第七期:湿度检测
  2. 浏览器阻挡cookies_解决WordPress登录提示”Cookies被阻止或者您的浏览器不支持”...
  3. python使用osgeo库_Python使用内置urllib模块或第三方库requests访问网络资源
  4. 全球与中国聚硫聚合物市场发展前景与投资可行性分析报告2021年版
  5. 荣事达空调质量差3天即坏
  6. 世界种业并购史 国际农民丰收节贸易会起底农化巨头构架
  7. What are current fashion trends in Sydney?
  8. oracle 清空表数据的2种方式及速度比较
  9. 给程序媛妹子的4个贴心建议
  10. Tomcat数据源总结