WPF入門教程系列三——Application介紹(續)

來源:互聯網
上載者:User

標籤:目錄   new   ram   xpl   nav   images   視窗   space   progress   

接上文WPF入門教程系列二——Application介紹,我們繼續來學習Application

三、WPF應用程式的關閉

       WPF應用程式的關閉只有在應用程式的 Shutdown 方法被調用時,應用程式才停止運行。 ShutDown 是隱式或顯式發生,可以通過指定 ShutdownMode 的屬性值來進行設定。

 ShutdownMode選項

 

OnLastWindowClose(預設值):

應用程式關閉時,或最後一個視窗關閉時關閉,或調用Application對象的Shutdown() 方法時,應用程式關閉。

OnMainWindowClose

啟動表單關閉或調用Application對象的Shutdown()方法時,應用程式關閉。(和C#的Windows應用程式的關閉模式比較類似)

OnExplicitShutdown

只有在調用Application對象的Shutdown()方法時,應用程式才會關閉。

 

  1. 對ShutdownMode選項的更改,可以直接在App.xaml中更改,如下代碼。
<Application x:Class="WpfApp1.App"             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"                         StartupUri="MainWindow.xaml" ShutdownMode="OnExplicitShutdown" >    <Application.Resources>            </Application.Resources></Application>

    2.  在代碼檔案(App.xaml.cs)中修改ShutdownMode選項,但必須注意這個設定要寫在app.Run()方法之前 ,如下代碼。

  app.ShutdownMode = ShutdownMode.OnExplicitShutdown;    app.Run(win);

 

Application對象的其他屬性:

名稱

說明

Current

擷取當前 AppDomain的 Application 對象。

Dispatcher

擷取與此 DispatcherObject 關聯的 Dispatcher。 (繼承自 DispatcherObject。)

MainWindow

擷取或設定應用程式的主視窗。

Properties

擷取應用程式範圍的屬性集合。

ResourceAssembly

擷取或設定對於 WPF 應用程式的資源提供已裝箱統一資源識別項 (URI) 的 Assembly 。

Resources

擷取或設定應用程式範圍資源的集合,例如樣式和畫筆。

ShutdownMode

擷取或設定會導致 Shutdown 方法調用的情況。

StartupUri

擷取或設定自動顯示的 UI ,當應用程式啟動時。

Windows

擷取在應用程式中執行個體化視窗。

 

四、添加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檔案中,具體添加方法見。

 

2、添加完事件之後的app.xml檔案代碼如下

<Application x:Class="WpfApp1.App"             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"             StartupUri="MainWindow.xaml" ShutdownMode="OnExplicitShutdown" Activated="Application_Activated" Exit="Application_Exit">    <Application.Resources>            </Application.Resources></Application>

 

3、在App.xaml.cs檔案的代碼如下:

using System;using System.Collections.Generic;using System.Configuration;using System.Data;using System.Linq;using System.Threading.Tasks;using System.Windows; namespace WpfApp1{    /// <summary>    /// App.xaml 的互動邏輯    /// </summary>    public partial class App : Application    {        private void Application_Activated(object sender, EventArgs e)        {         }         private void Application_Exit(object sender, ExitEventArgs e)        {         }    }}

 

 

4.在使用以上方式添加事件之後,如果在Visual Studio中按F5 執行應用程式時,報以下錯誤“不包含適合於進入點的靜態‘Main’方法”。這個錯誤是由於Visual Studio把專案檔(*.csproj)中原來自動產生的app.xaml相關的定義進行了修改。具體區別如下:

 1) 直接建立的WPF項目中的有關App.xaml的定義如下:

<ApplicationDefinition Include="App.xaml">      <Generator>MSBuild:Compile</Generator>      <SubType>Designer</SubType>    </ApplicationDefinition>


 2) Visual Studio把修改後的App.xaml的配置代碼如下: 

   <Page Include="App.xaml">      <SubType>Designer</SubType>      <Generator>MSBuild:Compile</Generator>    </Page>

 

  第一段代碼中App.xaml在專案檔裡面用ApplicationDefinition標籤定義。第二段代碼中App.xaml在專案檔裡面用Page標籤定義,這種定義是指App.xaml只是一個頁面而已。

  因此,只需要把專案檔中將App.xaml的配置由Page修改成ApplicationDefinition即可。

 

 

第二種方式

 1、可以像是在WinForm中的Program類中寫Main方法一樣,在WPF中一樣可以自訂一個app類中寫main及其他相關事件。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows; namespace WpfApp1{    class App    { [STAThread]        static void Main()        {            // 定義Application對象作為整個應用程式入口             Application app = new Application();              MainWindow win = new MainWindow();            app.ShutdownMode = ShutdownMode.OnMainWindowClose;            app.MainWindow = win;            //是必須的,否則無法顯示表單                  win.Show();             app.Run();            app.Activated += app_Activated;            app.Exit += app_Exit;         }  static void app_Activated(object sender, EventArgs e) {     throw new NotImplementedException(); }  static void app_Exit(object sender, ExitEventArgs e) {     throw new NotImplementedException(); }    }}

 

第三種方式

  1. 在App.xaml介面中,如位置1處,輸入Exit事件名稱,Visual Studio 2013會彈出一個菜單“建立事件處理常式”,雙擊這個菜單,Visual Studio 2013就會自動建立一個“Application_Exit”事件,如位置2處。

 

 

五、WPF應用程式生存周期

WPF應用程式的生命週期與執行順序,用MSDN上的一張圖片進行說明。顯示了視窗的生存期中的主體事件的順序。

 

WPF入門教程系列三——Application介紹(續)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.