TOC

This article has been localized into Chinese by the community.

WPF應用程式:

使用App.xaml

App.xaml是你的应用程序定义的起点。当你创建一个新的WPF应用时,Visual Stuido将自动为你创建它,同时还包括一个名为App.xaml.cs的后置代码文件。跟Window类似,这两个文件里面定义的是部分类,它们允许你同时在XAML标记和后置代码中完成工作。

App.xaml.cs 继承自Application类,在WPF Windows应用程序中是一个中心类。.NET会进入这个类,从这里启动需要的窗口或页面。这也是一个订阅一些重要应用程序事件的地方,例如,应用程序启动事件,未处理的异常事件等,更多内容会在后面提到。

App.xaml文件最常用的功能之一是定义全局资源,这些资源(例如全局样式)将可以从整个应用程序中使用和访问。这一点将在后面详细讨论。

App.xaml 结构

在创建一个新的应用程序时,可能会在自动生成的App.xaml中看到这样的内容:

<Application x:Class="WpfTutorialSamples.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

这里要注意的主要是StartupUri属性,它实际上指定了当应用程序启动时应该被加载的Window或Page。在这个例子中,MainWindow.xaml会被启动,但是如果你想使用另外一个window作为启动入口点,你只需要修改一下这个属性即可。

在某些场景下,你可能需要对第一个窗口怎样或何时显示加以控制。在这个例子中,你可以移除StartupUri属性和值,然后把对它做的所有工作使用后端代码替代。这将在下面进行演示。

App.xaml.cs 结构

通常情况下,对于一个新创建应用程序,与之匹配的App.xaml.cs 可能看起来像这个样子:

using System;
using System.Collections.Generic;
using System.Windows;

namespace WpfTutorialSamples
{
	public partial class App : Application
	{

	}
}

你会看到这个类继承自Application类,它允许我们在应用级别去做一些事情。举个例子,你可以订阅Startup事件,然后手动创建你的启动窗口。

这是一个示例:

<Application x:Class="WpfTutorialSamples.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
			 Startup="Application_Startup">
    <Application.Resources></Application.Resources>
</Application>

注意StartupUri是如何被Starup订阅事件所替换的(通过XAML订阅事件将在别的章节中解释)。在其背后的代码中,你可以像这样使用事件:

using System;
using System.Collections.Generic;
using System.Windows;

namespace WpfTutorialSamples
{
	public partial class App : Application
	{

		private void Application_Startup(object sender, StartupEventArgs e)
		{
			// Create the startup window
			MainWindow wnd = new MainWindow();
			// Do stuff here, e.g. to the window
			wnd.Title = "Something else";
			// Show the window
			wnd.Show();
		}
	}
}

比起使用StartupUri属性,在这个示例中比较酷的事是我们可以在显示启动窗口之前对它进行操纵。在这里,我们改变了它的title,虽然它不是特别有用,但是你还可以对其他事件进行订阅,或者显示一个启动屏幕(飞溅窗口)。当你可以控制所有东西的时候,你就可以做很多事情了。我们会在接下来的章节中深入研究其中的几个。