1.1认识Application
和C#WinForm类似,Application是System.Windows命名空间里的一个类(应用程序类),该类具有用于启动和停止应用程序和线程以及处理Windows消息的方法。它能启动当前线程上的应用程序消息循环,并可以选择使某窗体可见,也能来停止消息循环。当程序在某个循环中时,还可以借助它处理消息、向应用程序消息泵添加消息筛选器来监视Windows消息。甚至还可以借助它阻止引发某事件或在调用某事件处理程序前执行特殊操作。因此,Application类是WPF程序的一个重要类,通常我们就将该类的实例称为应用程序实例,代表当前应用程序,Application的生命周期自然是从应用程序启动到终止的周期。
Application的创建分为显式和隐式两种方式。
(1)隐式创建
默认创建的WPF应用程序里的App.xaml就是专门为Application服务的,它提供了Application的属性设置和事件处理程序。默认情况下App.xaml通过StartupUri定义了程序的启动窗体,通过该文件系统自动创建了一个以该启动窗体为主窗体的应用程序实例,并自动运行(激活)。
一个顶级窗口就是不包含或者不从属于其他窗口的窗口。Application被创建后第一个创建的顶级窗口就是主窗口,也可以通过设置MainWindow属性来改变主窗口。
(2)显式窗口
使用这种方法需要删除App.xaml中的StartupUri的值,并且启动函数Main必须是静态的,基于类似于C#WinForm的启动程序。
除了借助App.xaml信息创建Application实例外,我们还可以用类似C#程序一样的方法创建一个独立的启动类,声明静态Main()方法来创建应用程序实例。
该方法需要先删除App.xaml或者将其排除在项目外,不然程序会报有两个入口的错误。其具体实现有两种方式,第一种是给应用程序定义一个启动窗体,然后分别启动窗体和应用程序;第二种是代码配置应用程序的StartupUri属性,然后启动应用程序,该窗体会被自动启动。
需要注意新增类中使用Application类需要包括System.Windows命名空间,该命名空间对新建类不是默认加载。
(3)隐式创建的恢复
如果我们尝试了新建类方法后希望恢复WPF的App.xaml来启动系统,则编译后会报错:“不包含适合于入口点的静态Main方法”,这是因为App.xaml文件的默认“生成操作”属性已经被更改为Page了,需要手动重新更改为ApplicationDefinition。



