一、WPF應用程序由System.Windows.Application類進行管理

二、創建WPF應用程序

創建WPF應用程序有兩種方式:

1、Visual Studio和Expression Blend默認的方式,使用App.xaml文件定義啓動應用程序

    App.xaml文件的內容大致如下:

1: <Application x:Class="WpfApplicationLifeCycle.App"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     StartupUri="Window1.xaml">
   5:     <Application.Resources>
   6:     </Application.Resources>
   7: </Application>

    其中StartupUri指定啓動的WPF窗體

2、可以自已定義類,定義Main方法實現對WPF應用程序的啓動

    在項目中添加一個類,類的代碼如下,在項目選項中,設定此類為啓動項。

1: using System;
   2: using System.Windows;
   3: 
   4: namespace WpfApplicationLifeCycle
   5: {
   6:     public class MainClass
   7:     {
   8:         [STAThread]
   9:         static void Main()
  10:         {
  11:             // 定義Application對象
  12:             Application app = new Application();
  13:  
  14:             // 方法一:調用Run方法,參數為啓動的窗體對象
  15:             Window2 win = new Window2();
  16:             app.Run(win);
  17: 
  18:             // 方法二:指定Application對象的MainWindow屬性為啓動窗體,調用無參數的Run方法
  19:             //Window2 win = new Window2();
  20:             //app.MainWindow = win;
  21:             //win.Show();           // 此處必須有win.Show(),否則不能顯示窗體
  22:             //app.Run();
  23: 
  24:             // 方法三:
  25:             //app.StartupUri = new Uri("Window2.xaml", UriKind.Relative);
  26:             //app.Run();
  27:         }
  28:     }
  29: }

三、應用程序關閉

    應用程序關閉時的策略由ShutdownMode屬性指定,其類型為System.Windows.ShutdownMode枚舉類型,其枚舉成員有:

  • OnLastWindowClose(默認值):當應用程序中的最後一個窗體關閉時或調用Application對象的Shutdown()方法時,應用程序關閉。
  • OnMainWindowClose:當主窗體(即啓動窗體)關閉時或調用Application對象的Shutdown()方法時,應用程序關閉。(類似於C#Windows應用程序的關閉模式)
  • OnExplicitShutdown:只有在調用Application對象的Shutdown()方法時,應用程序才會關閉。

   更改的時候,可以直接在App.xaml中更改:

1: <Application x:Class="WpfApplicationLifeCycle.App"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     StartupUri="Window1.xaml"
   5:     ShutdownMode="OnExplicitShutdown">
   6:     <Application.Resources>
   7:     </Application.Resources>
   8: </Application>
   也可以在代碼文件(App.xaml.cs)中更改
   1: Application app = new Application();
   2: Window2 win = new Window2();
   3: 
   4: // 更改關閉模式必須要在調用app.Run()方法之前
   5: app.ShutdownMode = ShutdownMode.OnExplicitShutdown;
   6: app.Run(win);

四、Application對象的事件

名稱

説明

Activated

當應用程序成為前台應用程序時發生。

Deactivated

當應用程序停止作為前台應用程序時發生。

DispatcherUnhandledException

在異常由應用程序引發但未進行處理時發生。

Exit

恰好在應用程序關閉之前發生,且無法取消。

FragmentNavigation

當應用程序中的導航器開始導航至某個內容片斷時發生,如果所需片段位於當前內容中,則導航會立即發生;或者,如果所需片段位於不同內容中,則導航會在加載了源 XAML 內容之後發生。

LoadCompleted

在已經加載、分析並開始呈現應用程序中的導航器導航到的內容時發生。

Navigated

在已經找到應用程序中的導航器要導航到的內容時發生,儘管此時該內容可能尚未完成加載。

Navigating

在應用程序中的導航器請求新導航時發生。

NavigationFailed

在應用程序中的導航器在導航到所請求內容時出現錯誤的情況下發生。

NavigationProgress

在由應用程序中的導航器管理的下載過程中定期發生,以提供導航進度信息。

NavigationStopped

在調用應用程序中的導航器的 StopLoading 方法時發生,或者當導航器在當前導航正在進行期間請求了一個新導航時發生。

SessionEnding

在用户通過註銷或關閉操作系統而結束 Windows 會話時發生。

Startup

在調用 Application 對象的 Run 方法時發生。

應用程序的事件處理可以:

1、在App.xaml中做事件的綁定,在App.xaml.cs文件中添加事件的處理方法

    在App.xaml文件中:

1: <Application x:Class="WpfApplicationLifeCycle.App"
   2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:     StartupUri="Window1.xaml"
   5:     Startup="Application_Startup">
   6:     <Application.Resources>
   7:     </Application.Resources>
   8: </Application>

    在App.xaml.cs文件中:

1: using System.Windows;
   2: 
   3: namespace WpfApplicationLifeCycle
   4: {
   5:     /// <summary>
   6:     /// Interaction logic for App.xaml
   7:     /// </summary>
   8:     public partial class App : Application
   9:     {
  10:         private void Application_Startup(object sender, StartupEventArgs e)
  11:         {
  12:             // 定義應用程序啓動時要處理的內容
  13:         }
  14:     }
  15: }

2、在自定義的類中可以做正常的C#的事件綁定:

1: [STAThread]
   2: static void Main()
   3: {
   4:     // 定義Application對象
   5:     Application app = new Application();
   6:     Window2 win = new Window2();
   7: 
   8:     // 添加事件的綁定
   9:     app.Startup += new StartupEventHandler(app_Startup);
  10: 
  11:     app.Run(win);
  12: }
  13: 
  14: static void app_Startup(object sender, StartupEventArgs e)
  15: {
  16:    Window2 win = new Window2();
            win.Show();
            win.button1.Content = "YOU!";
  17: }

     主窗體載入時,會在Window2裏面定義的button1上面就會顯示YOU!

 

五、WPF應用程序生存週期