Application类是WPF类型中的一个基础,是每一个WPF必有的部分。
Application类在应用程序中所处的位置
WPF应用程序中,Application类实例是应用程序实例的代表,每个WPF应用程序中都存在一个Application实例,它用于接收程序参数,处理程序事件。
一个不使用WPF XAML框架的应用程序实例代码
使用Application类的最简单方式是手动创建它。下面实例简单的演示了最小的应用程序:在应用程序的入口处创建名为Window1的窗口,并启动一个新的应用程序:
using System;
using System.Windows;
public class Startup{
static void Main(){
//create the application
Application app = new Application();
//create the main window.
Window1 win = new Window1();
//Launch the application and show the main window.
app.Run(win);
}}
如果希望通过Main方法启动应用程序并处理传递参数,可以通过在WPF程序中改变VS属性配置来设定某个含有Main方法的类最为启动对象。
可以看出在应用程序中,启动顺序一般都是启动main方法,然后实例化application类,之后想application类中传递界面实例,这样应用程序就启动起来了。
然而真正的WPF肯定不是利用这种方法启动的,从代码和逻辑的表现上看就不一样。
但是肯定类似。
经典的WPF应用程序启动实例
下面是一个常见WPF项目中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"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="Window1.xaml"
ShutdownMode="OnLastWindowClose">
<Application.Resources>
</Application.Resources>
</Application>
本例中采用了app.xaml来配置应用程序,它制造了一个派生类App,派生于Application类,位置在于WpfApp1.App。可以看到WPF工程中是没有Main方法存在的,它应该利用了某种框架提供的类似方法,在利用反射等默认机制工作的过程中调用了Main方法。Main方法肯定是存在的,但是让WPF框架给藏起来了。
xaml文件是WPF工程中的类模板,VS利用XAML语句自动生成C#类App.g.cs。
StartupUri指定了应用程序启动的主界面是什么。在WpfApp1.App中可以自定义语句用来处理App接收到的命令行参数和应用程序事件处理代码。一般用于处理应用程序事件的方法可以利用继承特性重写,另一方面可以利用app.xaml配置之后关联方法。一般采用app.xaml进行配置,这样比较清楚明白。
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"
xmlns:local="clr-namespace:WpfApp1"
Startup="Application_Startup"
ShutdownMode="OnLastWindowClose">
<Application.Resources>
</Application.Resources>
</Application>
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_Startup(object sender, StartupEventArgs e)
{
MainWindow fMain = new WpfApp1.MainWindow();
frmLogin fLogin = new frmLogin();
if(fLogin.ShowDialog() == true)
{
fMain.Show();
}
else
{
fMain.Close();
}
}
}
}
这里实现了一个登录窗口的创意,在app.xaml中指定了Startup属性(不是StartupUri)也就表明了在Application对象实例化之后,会调用Application_Startup方法进行进一步处理。