接上文WPF入门教程系列二——Application介绍,我们继续来学习Application
三、WPF应用程序的关闭
WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序才停止运行。 ShutDown 是隐式或显式发生,可以通过指定 ShutdownMode 的属性值来进行设置。
ShutdownMode选项 |
|
OnLastWindowClose(默认值): |
应用程序关闭时,或最后一个窗口关闭时关闭,或调用Application对象的Shutdown() 方法时,应用程序关闭。 |
OnMainWindowClose |
启动窗体关闭或调用Application对象的Shutdown()方法时,应用程序关闭。(和C#的Windows应用程序的关闭模式比较类似) |
OnExplicitShutdown |
只有在调用Application对象的Shutdown()方法时,应用程序才会关闭。 |
- 对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。 |
MainWindow |
获取或设置应用程序的主窗口。 |
Properties |
获取应用程序范围的属性集合。 |
ResourceAssembly |
获取或设置对于 WPF 应用程序的资源提供已装箱统一资源标识符 |
Resources |
获取或设置应用程序范围资源的集合,例如样式和画笔。 |
ShutdownMode |
获取或设置会导致 Shutdown 方法调用的情况。 |
StartupUri |
获取或设置自动显示的 UI ,当应用程序启动时。 |
Windows |
获取在应用程序中实例化窗口。 |
四、添加Application对象事件
名称 |
说明 |
Activated |
当应用程序成为前台应用程序时触发。 |
Deactivated |
当应用程序不再是前台应用程序时触发。 |
DispatcherUnhandledException |
如果异常是由应用程序引发,但未处理,触发。 |
Exit |
在应用程序关闭之前,触发,而且不能撤消。 |
FragmentNavigation |
发生在应用程序的一个浏览器启动导航到内容片段导航时,会立即发生,如果所需片段在当前目录,或者,在源 XAML 目录加载后,如果所需片段在其他内容。 |
LoadCompleted |
在导航到在应用程序中的一个浏览器的目录加载的分析完成并已呈现时触发。 |
Navigated |
当导航到在应用程序中使用的浏览器已找到的内容时触发,这时它可能还没有完成加载。 |
Navigating |
在一个新的导航由应用程序,一个浏览器请求发生。 |
NavigationFailed |
出现问题,则错误,当应用程序的一个浏览器导航到所请求的内容时。 |
NavigationProgress |
定期发生在应用程序中使用浏览器管理提供导航进度信息的下载过程。 |
NavigationStopped |
发生在一个浏览器的 StopLoading 方法在应用程序的调用,或者,如果新的导航由浏览器请求,在当前导航正在进行的。 |
SessionEnding |
当用户在注销或关闭操作系统关闭 |
Startup |
当 Application 对象的 |
在应用程序中添加事件的方式有如下三种。
第一种方式:
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(); } } }
第三种方式
- 在App.xaml界面中,如下图位置1处,输入Exit事件名称,Visual Studio 2013会弹出一个菜单“新建事件处理程序”,双击这个菜单,Visual Studio 2013就会自动创建一个“Application_Exit”事件,如下图位置2处。
五、WPF应用程序生存周期
WPF应用程序的生命周期与执行顺序,用MSDN上的一张图片进行说明。下图显示了窗口的生存期中的主体事件的顺序。
WPF入门教程系列三——Application介绍(续)的更多相关文章
-
WPF入门教程系列二——Application介绍
一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只 ...
-
WPF入门教程系列四——Dispatcher介绍
一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以 ...
-
WPF入门教程系列六——布局介绍与Canvas(一)
从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感 ...
-
WPF入门教程系列五——Window 介绍
一.窗体类基本概念 对于WPF应用程序,在Visual Studio和Expression Blend中,自定义的窗体均继承System.Windows.Window类.用户通过窗口与 Windows ...
-
WPF入门教程系列三
WPF之Binding的使用(一) 一. 前言 初学WPF经常被Binding搞得苦不堪言,Binding的重用性就不做介绍了,在WPF应用程序开发中Binding是一个非常重要的部分.WPF也是近 ...
-
WPF入门教程系列二十三——DataGrid示例(三)
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...
-
WPF入门教程系列(一) 创建你的第一个WPF项目
WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...
-
WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...
-
WPF入门教程系列一
WPF入门教程 一. 前言 公司项目基于WPF开发,最近项目上线有点空闲时间写一篇基于wpf的基础教材,WPF也是近期才接触,学习WPF也是在网上查资料与微软的MSDN进行学习,写本博客的目为了温 ...
随机推荐
-
RDIFramework.NET ━ 9.4 角色管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.4 角色管理 -Web部分 角色管理模块主要为了方便框架权限的分配,提高权限分配的效率,减少重复设置权限的工作量.角色(用户组 ...
-
const限定符
1 const的作用 便于进行类型检查.可以保护被修饰的东西.避免不必要的内存分配.为函数重载提供一个参考. 2 const成员函数 const成员函数只能访问数据成员的值,而不能修改他. #incl ...
-
Android 中的selector
今天做程序时,发现了selector 选择器不单单能用系统的自定义属性(比如, <item android:state_selected="true" android:co ...
-
Executing modules as scripts
When you run a Python module with python fibo.py <arguments> the code in the module will be ex ...
-
ADB 远程无线调试
由于自己购买的x4412 Android开发板存在一个问题,是无法同时链接USB线,和插入无线网卡.只能使用其中一个功能 需要复现一个DRM在线下载的功能,同时需要抓起一些日志信息,此处就想到了使用 ...
-
01_Python简介
Python 简介 *为什么学习python http://bbs.fishc.com/thread-35584-1-1.html Python 特点 易于学习:Python有相对较少的关键字,结构简 ...
-
Function与Object的关系
这里先简单介绍一下我研究这个问题的初衷.起初我只是想研究一下原型链的基本思想.构造函数拥有prototype属性,指向它的prototype,而该构造函数的实例化对象则拥有一个[[prototype] ...
-
classes目录中没有class文件的一个原因
可能是你的build设置有问题:比如本来有的jar被删除的情况下.build不会报错,但是classes目录下什么都没有.
-
Shell 编程中,在循环里使用ssh免密远程执行命令的注意事项
前提:给自己机器配置ssh免密登录#!/bin/bashcat << 'EOD' > list1234EOD while read linedo if ssh myname@127. ...
-
Beginning SDL 2.0(4) YUV加载及渲染
本文主要内容是基于的“Beginning SDL 2.0(3) SDL介绍及BMP渲染”(以下简称BS3)基础上,将BMP加载及渲染修改为YUV420或I420的原始视频格式.阅读完本部分内容相信你可 ...