WPF窗體的生命週期

2021-08-09 03:44:11 字數 2245 閱讀 8445

和所有類一樣,視窗也有生存期,在第一次例項化視窗時生存期開始,然後就可以顯示、啟用和停用視窗,直到最終關閉視窗。

1、顯示窗體

2、窗體的啟用

在首次開啟乙個視窗時,它便成為活動視窗(除非是在 showactivated 設定為 false 的情況下顯示)。 活動視窗是當前正在捕獲使用者輸入(例如,鍵擊和滑鼠單擊)的視窗。 當視窗變為活動視窗時,它會引發 activated 事件。

當第一次開啟視窗時,只有在引發了 activated 事件之後,才會引發 loaded 和 contentrendered 事件。 記住這一點,在引發 contentrendered 時,便可認為視窗已開啟。 

視窗變為活動視窗之後,使用者可以在同乙個應用程式中啟用其他視窗,還可以啟用其他應用程式。 當這種情況出現時,當前的活動視窗將停用,並引發 deactivated 

事件。 同樣,當使用者選擇當前停用的視窗時,該視窗會再次變成活動視窗並引發 activated。

3、關閉窗體

當使用者關閉視窗時,視窗的生命便開始走向終結。

4、窗體的生命週期。如下圖。

為了證實上面的結論,我們用下面的**進行測試:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

using

system.threading.tasks;

using

system.windows;

using

system.windows.controls;

using

system.windows.data;

using

system.windows.documents;

using

system.windows.input;

using

system.windows.media;

using

system.windows.media.imaging;

using

system.windows.shapes;

using

system.windows.threading;

namespace

void windowthd_sourceinitialized(object

sender, eventargs e)

void windowthd_unloaded(object

sender, routedeventargs e)

void windowthd_closed(object

sender, eventargs e)

void windowthd_loaded(object

sender, routedeventargs e)

void windowthd_deactivated(object

sender, eventargs e)

void windowthd_contentrendered(object

sender, eventargs e)

void windowthd_closing(object

sender, system.componentmodel.canceleventargs e)

void windowthd_activated(object

sender, eventargs e)

private

void

modifyui());}

private

void btnthd_click(object

sender, routedeventargs e)

private

sender, routedeventargs e)

));}).start();}}

}

開啟窗體的事件執行順序為:如下圖。

wpf生命週期

注意 windows視窗的生命週期也有好幾個階段 1 構造器被呼叫 2 window.initialized事件被觸發 3 window.activated事件被觸發 4 window.loaded事件被觸發 5 window.contentrendered事件被觸發 6 使用者和視窗進行互動 7 ...

WPF中的視窗的生命週期

wpf中所有視窗的基型別都是system.windows.window。window通常用於sdi視窗和對話方塊。window在應用程式中除了乙個設計用於託管頂級內容的控制項外,就別無他物了。典型的,可以混合使用標記和 來定義乙個視窗。如下 在xaml頁 xmlns xmlns x title th...

WPF高階教程(十)WPF程式的生命週期

建立 xmlns xmlns x 其中比較關鍵的是指定了startupuri關閉 事件處理 1.關聯事件處理程式 xaml cs檔案 2.直接複寫 protected override void onactivated eventargs e onsessionending方法如果監聽,設定e.ca...