一起學(xué)WPF系列(3):窗體
概述
Windows Presentation Foundation (WPF) 是下一代顯示系統(tǒng),用于生成能帶給用戶震撼視覺體驗(yàn)的 Windows 客戶端應(yīng)用程序。使用 WPF,您可以創(chuàng)建廣泛的獨(dú)立應(yīng)用程序以及瀏覽器承載的應(yīng)用程序。一直以來,我對(duì)界面的東西是不怎么感興趣的,可自從Windows Presentation Foundation (WPF)發(fā)布之后,也不免為它能實(shí)現(xiàn)的絢麗的界面所吸引,《一起學(xué)WPF系列》和大家一起分享學(xué)習(xí)WPF學(xué)習(xí)經(jīng)驗(yàn)的系列文章。
本文是《一起學(xué)WPF系列》中的第三篇,開始學(xué)習(xí)WPF的基礎(chǔ)知識(shí).
本文目的:
學(xué)習(xí)和掌握WPF中窗體的構(gòu)成,創(chuàng)建方式,生命周期,位置,大小,狀態(tài),外觀等控制方式。
窗體構(gòu)成:
窗體是WPF中最重要的一個(gè)呈現(xiàn)控件,它能夠容納其他的WPF控件,用戶通常也是通過窗口來與WPF應(yīng)用程序進(jìn)行數(shù)據(jù)交互的。而一個(gè)WPF窗體被分為兩個(gè)區(qū)域:客戶區(qū)和非客戶區(qū)。它的構(gòu)成圖如下:
非客戶端包括普通窗體的通用組成部分,它們?yōu)椋?
- 邊框(Border)
- 標(biāo)題欄(Title Bar)
- 圖標(biāo)(Icon)
- 最大化,最小化,還原,關(guān)閉按鈕
- 系統(tǒng)菜單
而客戶端,我們也可以稱之為工作區(qū),它是用于供開發(fā)人員自定義內(nèi)容的區(qū)域。在WPF中,窗體的實(shí)現(xiàn)類為:System.Windows.Window.它在架構(gòu)中層次結(jié)構(gòu)如下圖所示:
由層次結(jié)構(gòu)中可以看出,窗體也是一種控件。它們與Button,UserControl等同屬于WPF架構(gòu)中的FrameworkElement.
創(chuàng)建方式:
如果在創(chuàng)建項(xiàng)目的時(shí)候,選擇的是WPF Application項(xiàng)目模板,那么在項(xiàng)目創(chuàng)建完成之后,便會(huì)有一個(gè)名為Window1的窗體。這個(gè)在上文我們已經(jīng)有所體驗(yàn),如果需要添加新的窗體,可以在資源管理器中右擊項(xiàng)目,然后選擇Add-Window..,如下圖所示:
如果要使用XAML來創(chuàng)建窗體,代碼如下:
<Window x:Class="Jillzhang.Wpf.WindowStudy.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
</Window> 

窗體的后臺(tái)代碼為:
/// <summary> 
/// Interaction logic for Window1.xaml 
/// </summary> 
public partial class Window1 : Window 
{ 
public Window1() 
{ 
InitializeComponent(); 
} 
} 

下面的列表是對(duì)XAML文件的解析
|
名稱 |
類型 |
說明 |
|
Window |
元素(Element) |
用于聲明一個(gè)WPF窗體 |
|
x:Class |
屬性(必須) |
指示窗體對(duì)應(yīng)的的類,它繼承于System.Windows.Window |
|
xmlns |
屬性(必須) |
XAML命名空間 |
|
xmlns:x |
屬性必須 |
XAML架構(gòu)中的x:的命名空間 |
x:Class指示的類默認(rèn)情況下是使一個(gè)partical 類,它的構(gòu)造函數(shù)必須包含InitializeComponent();
生命周期:
窗口的生命周期對(duì)編程的時(shí)候影響甚大,如果不清楚窗口的生命周期,一不小心很可能就引發(fā)對(duì)象空引用的錯(cuò)誤,一個(gè)窗體它的生命周期圖如下:
首先我們先來看看打開窗體的步驟,要想在應(yīng)用程序中打開一個(gè)窗體,必須先創(chuàng)建窗體的對(duì)象實(shí)例,方法有兩個(gè): 1)通過StartupUri來設(shè)定2)通過編程方式來實(shí)現(xiàn)。第一種方式我們?cè)谏衔闹幸呀?jīng)提到過,第二種方式可書寫代碼如下:
Window1 window = new Window1();
window.Show(); 
注意如果是在Application的Startup事件中實(shí)例化窗口,窗口引用會(huì)自動(dòng)添加到Applicaton.Windows集合中,并且第一個(gè)實(shí)例化的窗口被當(dāng)成Application.MainWindow。在調(diào)用Show()方法進(jìn)行窗體顯示之前,窗體會(huì)進(jìn)行初始化工作,此時(shí)會(huì)引發(fā)SourceInitialized事件,此后呈現(xiàn)窗體,當(dāng)窗體第一次顯示,便引發(fā)窗體的Activated事件,使得該窗體稱為活動(dòng)窗體,活動(dòng)窗體能夠接受用戶輸入,激活窗口操作完成之后,窗體的Load事件才會(huì)被觸發(fā),其后引發(fā)ContentRendered事件,當(dāng)ContentRendered引發(fā)后表示窗體已經(jīng)被打開。而此時(shí),如果切換了窗體,那么原本的活動(dòng)窗口便會(huì)引發(fā)Deactivated事件,而切換到的窗口引發(fā)Activated事件。窗體是否處于活動(dòng)狀態(tài),可以通過IsActive屬性來確定。下面看一下窗體的關(guān)閉過程,點(diǎn)擊非客戶區(qū)的關(guān)閉按鈕或者用系統(tǒng)熱鍵Alt+F4,調(diào)用窗體的Close()方法或者用其他方式關(guān)閉窗體的時(shí)候,都會(huì)觸發(fā)窗體的Closing事件和Closed事件。Closing在窗口關(guān)閉之前,用于提供一種機(jī)制用于阻止窗口關(guān)閉,比如關(guān)閉之前檢查數(shù)據(jù)是否已經(jīng)被成功提交從而決定關(guān)閉操作是否繼續(xù)。如果要阻止關(guān)閉窗口,可以將Closing事件的CacelEventArg參數(shù)的Cacel屬性為True。在Closing中沒有被取消的窗體將觸發(fā)Closed事件。
注:雖然msdn上窗體事件的執(zhí)行順序如上圖所示,可我測(cè)試過的結(jié)果和上圖略有差異,就是Loaded的位置,我測(cè)試的結(jié)果如下圖所示:
我的測(cè)試結(jié)果效果為:
這和msdn的說明不太一致,搞不明白為何!不過我相信我的測(cè)試結(jié)果應(yīng)該是正確的
起始位置:
窗口的起始位置可以通過WindowStartupLocation屬性來確定,他們的可選選項(xiàng)為:
|
位置 |
說明 |
|
CenterOwner |
所有者的中間位置 |
|
CenterScreen |
屏幕的中間位置 |
|
Manual |
根據(jù)Left和Top來確定起始位置,如果沒有設(shè)置,將由Windows決定位置 |
另外,窗口還有Z-Order和Topmost屬性用于設(shè)置窗體在Z軸上的位置。設(shè)置了Topmost的窗體將無法被其他窗體覆蓋。當(dāng)主窗體Topmost屬性為false的效果為:
而主窗體的Topmost為true時(shí),效果為:
大小:
窗體的大小由Width和Height或者用SizeToContent來決定 ,SizeToContent包括四個(gè)選項(xiàng)
|
選項(xiàng) |
說明 |
|
Height |
窗體只自動(dòng)適應(yīng)內(nèi)容高度 |
|
Width |
窗體只自動(dòng)適應(yīng)內(nèi)容長(zhǎng)度 |
|
Manual |
窗體大小由windows來決定 |
|
WidthAndHeight |
窗體自動(dòng)適應(yīng)內(nèi)容長(zhǎng)度和高度 |
狀態(tài):
窗體狀態(tài)有如下三種:
|
狀態(tài) |
說明 |
|
Normal |
正常窗體 |
|
Maximized |
最大化 |
|
Minimized |
最小化 |
外觀:
窗體樣式包括四個(gè):
|
窗體樣式 |
說明 |
|
None |
不包括非客戶區(qū)的標(biāo)題欄,系統(tǒng)菜單,最大,最小,關(guān)閉按鈕,圖標(biāo)等 |
|
SingleBorderWindow |
普通邊框 |
|
ThreeDBorderWindow |
3D邊框 |
|
ToolWindow |
不包括圖標(biāo),最大,最小化按鈕 |
范例項(xiàng)目
/Files/jillzhang/Jillzhang.Wpf.WindowStudy.rar
結(jié)束語
WPF中的窗口與 Window Form基本相似,但增加了一些額特殊功能,文中有關(guān)事件執(zhí)行順序我現(xiàn)在還有疑惑,因?yàn)槲覝y(cè)試結(jié)果和msdn說明不太一致,希望明白人指點(diǎn)一二,不勝感激
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

一起學(xué)WPF系列
概述
Windows Presentation Foundation (WPF) 是下一代顯示系統(tǒng),用于生成能帶給用戶震撼視覺體驗(yàn)的 Windows 客戶端應(yīng)用程序。使用 WPF,您可以創(chuàng)建廣泛的獨(dú)立應(yīng)用程序以及瀏覽器承載的應(yīng)用程序。一直以來,我對(duì)界面的東西是不怎么感興趣的,可自從Windows Presentation Foundation (WPF)發(fā)布之后,也不免為它能實(shí)現(xiàn)的絢麗的界面所吸引,《一起學(xué)WPF系列》和大家一起分享學(xué)習(xí)WPF學(xué)習(xí)經(jīng)驗(yàn)的系列文章。
本文是《一起學(xué)WPF系列》中的第三篇,開始學(xué)習(xí)WPF的基礎(chǔ)知識(shí).



浙公網(wǎng)安備 33010602011771號(hào)