接上文WPF入门教程系列二——Application介绍,咱们继续来学习Applicationhtml
3、WPF应用程序的关闭浏览器
WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序才中止运行。 ShutDown 是隐式或显式发生,能够经过指定 ShutdownMode 的属性值来进行设置。app
ShutdownMode选项post |
|
OnLastWindowClose(默认值):学习 |
应用程序关闭时,或最后一个窗口关闭时关闭,或调用Application对象的Shutdown() 方法时,应用程序关闭。ui |
OnMainWindowCloseurl |
启动窗体关闭或调用Application对象的Shutdown()方法时,应用程序关闭。(和C#的Windows应用程序的关闭模式比较相似)spa |
OnExplicitShutdown操作系统 |
只有在调用Application对象的Shutdown()方法时,应用程序才会关闭。code |
<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 |
获取在应用程序中实例化窗口。 |
4、添加Application对象事件
名称 |
说明 |
Activated |
当应用程序成为前台应用程序时触发。 |
Deactivated |
当应用程序再也不是前台应用程序时触发。 |
DispatcherUnhandledException |
若是异常是由应用程序引起,但未处理,触发。 |
Exit |
在应用程序关闭以前,触发,并且不能撤消。 |
FragmentNavigation |
发生在应用程序的一个浏览器启动导航到内容片断导航时,会当即发生,若是所需片断在当前目录,或者,在源 XAML 目录加载后,若是所需片断在其余内容。 |
LoadCompleted |
在导航到在应用程序中的一个浏览器的目录加载的分析完成并已呈现时触发。 |
Navigated |
当导航到在应用程序中使用的浏览器已找到的内容时触发,这时它可能尚未完成加载。 |
Navigating |
在一个新的导航由应用程序,一个浏览器请求发生。 |
NavigationFailed |
出现问题,则错误,当应用程序的一个浏览器导航到所请求的内容时。 |
NavigationProgress |
按期发生在应用程序中使用浏览器管理提供导航进度信息的下载过程。 |
NavigationStopped |
发生在一个浏览器的 StopLoading 方法在应用程序的调用,或者,若是新的导航由浏览器请求,在当前导航正在进行的。 |
SessionEnding |
当用户在注销或关闭操做系统关闭 Windows 会话时发生。 |
Startup |
当 Application 对象的 Run 方法调用,发生。 |
在应用程序中添加事件的方式有以下三种。
第一种方式:
一、在App.xaml中作事件的绑定,在App.xaml.cs文件中添加事件的处理方法
在App.xaml文件中,具体添加方法见下图。
二、添加完事件以后的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>
三、在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便可。
第二种方式
一、能够像是在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(); } } }
第三种方式
5、WPF应用程序生存周期
WPF应用程序的生命周期与执行顺序,用MSDN上的一张图片进行说明。下图显示了窗口的生存期中的主体事件的顺序。