由於每個應用程序必須創建一個Application對象,vs為開發人員提供了模板來減輕開發人員的重復工作。當使用vs創建一個WPF應用程序是,vs會自動創建一個app.xaml文件,
<Application x:Class="WpfApplication8.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication8" StartupUri="MainWindow.xaml"> <Application.Resources> </Application.Resources> </Application>
聲明代碼中的startupUri屬性用於指定將要作為應用程序主窗口的XAML文件,這個app.xaml文件同樣也具有一個后置文件,與XAML代碼想關聯的后置文件
派生自XAML根元素的派生類。因此從app.xaml.cs中可以看到,app類是一個派生自Application類的派生類,但是讓人好奇的是,后置代碼並沒有發現Main方法,也沒有看到實例化
Application類的代碼。
與MainWindow.xaml一樣,vs自動為app.xaml產生了一個局部類名為App.g.cs。在應用程序編譯后,可以從obj\Debug文件夾下找到這個文件。App.g.cs的源代碼如下
public partial class App : System.Windows.Application { /// <summary> /// InitializeComponent 方法自動生成的代碼 /// </summary> [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] public void InitializeComponent() { #line 5 "..\..\App.xaml" this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative); #line default #line hidden } /// <summary> /// Application Entry Point. /// </summary> /// vs足底報告生成的應用程序的入口點 [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] public static void Main() { //創建一個派生子Application類的實例 WpfApplication8.App app = new WpfApplication8.App(); app.InitializeComponent(); app.Run(); } } }
在這個自動生成的局部類,可以看到產生了一個Main方法來作為應用程序的入口點,Main方法首先實例化一個App對象,緊接着調用了靜態的InitializeComponent方法。在該方法中,只是為了Application類設置了Startup屬性,為該屬性
賦予一個相對路徑的XAML文件的URI。