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是如何被Startup订阅事件所替换的(通过XAML订阅事件将在别的章节中解释)。在其背后的代码(App.xaml.cs)中,你可以像这样写StartUp事件:

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(虽然它不是特别有用)。你还可以对其他事件进行订阅,或者显示一个启动窗口。当你可以控制一切的时候,你就可以做很多事情了。我们会在接下来的章节中深入研究其中的一部分。