App.xaml是你的应用程序定义的起点。当你创建一个新的WPF应用时,Visual Stuido将自动为你创建它,同时还包括一个名为App.xaml.cs的后置代码文件。跟Window类似,这两个文件里面定义的是部分类,它们允许你同时在XAML标记和后置代码中完成工作。
App.xaml.cs 继承自Application类,在WPF Windows应用程序中是一个中心类。.NET会进入这个类,从这里启动需要的窗口或页面。这也是一个订阅一些重要应用程序事件的地方,例如,应用程序启动事件,未处理的异常事件等,更多内容会在后面提到。
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 可能看起来像这个样子:
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对事件进行订阅在另外一个章节中有介绍)。在代码后置中,你可以像这样来使用事件:
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,虽然它不是特别有用,但是你还可以对其他事件进行订阅,或者显示一个启动屏幕(飞溅窗口)。当你可以控制所有东西的时候,你就可以做很多事情了。我们会在接下来的章节中深入研究其中的几个。
2023 chaojicainiao.com MIT license