知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述WPF入门教程系列三——Application介绍(续)相关的知识,希望能为你提供帮助。
接上文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。 (继承自
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即可。
【WPF入门教程系列三——Application介绍(续)】
第二种方式
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上的一张图片进行说明。下图显示了窗口的生存期中的主体事件的顺序。
文章图片
推荐阅读
- Android基础系列合集
- 完整Android开发基础入门博客专栏
- WPF入门教程系列二——Application介绍
- WPF入门教程系列七——布局之WrapPanel与StackPanel
- Android Studio环境解读
- Android应用层View绘制流程与源码分析
- Android 菜单动态变化添加或去除
- Android开发——导入github安卓项目源码
- [Android开发] Android Studio问题以及解决记录