小序:
Hi,你們好!幾乎兩個月沒有寫技術文章了。這兩個月,我在學習WPF。回顧一下兩個月的學習歷程,有兩個感受——第一,WPF是一項很是實用又簡單易學的東西,它將成爲將來MS平臺上快速開發的主流趨勢;第二,WPF的學習比較講求路徑,若是沒有一個比較好的路徑,學習起來可能比較慢,主要緣由是它像是一種ASP.NET與Windows Forms的「雜交品種」,裏面有不少內容與前二者似像非像,同時還有不少新內容的引入。
本系列文章的主要目標是:
幫助你們學習
WPF
技術,快速成爲這項技術的開路先鋒。在此,我借CSDN一塊寶地,把這兩個月來學習到的東西作一個整理,奉獻給你們。但願你們能喜歡。BTW,本系列文章的風格將一改之前長篇累牘的樣式,改變爲很是短小的篇幅,每篇文章一兩個知識點,小步快跑、每天積累。這樣,我寫着不累,你看着也不累。
在我兩個月的學習中,個人同事們——Anstinus、 Mathew、 Allen、 ChengSong、 Edward和Mike——他們像戰場上的戰友同樣給了我無數的幫助。在這裏,我向這些同事表示深深的感謝和敬意。還有個人搭檔——大美女Yan,和你在一塊兒工做很開心。
正文:
什麼是WPF
WPF,Windows Presentation Foundation也,譯過來就是「Windows呈現基礎」,你看它的目的很是明確,就是用來把數據「顯示」給用戶看的(說白了就是用來作UI的)。若是隻是給用戶顯示幾串文本、兩三張圖片或者幾個表格那WPF就太糗了,幸乎,WPF可不是這等素食動物——你們都見過Flash動畫吧,WPF的顯示能力絲絕不亞於Flash以及Flash的同門師弟Flex+AIR(某建築公司產品)。
爲何會有WPF
「微軟出點兒什麼新東西,我就得跟着跑!」我也曾這樣抱怨過。不過,當大量的工做任務壓在頭上的時候,我終於感受到——每一次技術(包括理念、架構、語言、工具)的更新都帶來了巨大的工做效率提高。的確,咱們須要花些時間來搞懂那些看起來亂糟糟的新概念,但搞明白以後——坦白地講,在有人帶的狀況下,這並非什麼難事——咱們就能用很是少的代碼來換取先前技術大量代碼才能得到的功能。彷佛代碼量是開發團隊中一切糟糕問題的罪魁禍首,so,明白了?
對於WPF是如何減小代碼量的,後面有一個例子。但WPF毫不是一個只能幫咱們減小代碼量的傢伙,更重要的是,它還能幫咱們把程序的界面和功能邏輯近乎完全地剝離——in a nutshell,把你的程序變成一隻香蕉或者橘子——「皮」是能夠從「瓤」上剝下來的,一旦某天用戶說:「這個橘子能不能看起來像是個香蕉?」你就能夠爲你的橘子瓣兒裹上漂亮的進口香蕉皮再開出一個更漂亮的價碼。
WPF是怎樣作到的
使用WPF技術開發產品,程序的「皮」,也就是UI,是使用XAML語言來「畫」出來的;而程序的「瓤」,也就是功能邏輯,能夠由程序員來選擇使用C#/VB.NET/C++.NET等託管語言來實現。
對於程序員們來講,C#/VB.NET/C++什麼的已是耳熟能詳。XAML是什麼呢?簡言之,XAML(讀音爲「zamel」,近似於「咋沒有」)是XML語言的一個衍生物,它的語法基本上與XML語言徹底一致;它的功能就是專門用來設計和實現程序的UI;它看起來和HTML語言很是像,不管你是程序員仍是美工人員,只要你設計過網頁,那學習XAML對你來講都是小菜一碟兒。並且,XAML可不像HTML和XHTML那樣只能呆在Web開發領域——XAML對於Web開發和桌面開發是「通吃」的,從Web程序改爲桌面程序或者反過來,所付出的工做量驚人的小,並且因爲UI與邏輯徹底分離,邏輯代碼幾乎不用改動——這意味着兩種開發的邊界漸漸消失,兩類設計人員和程序員將會染指「彼岸」、拿到更多的項目、掙更多的錢。
WPF以前,不管是Win32 API編程、使用MFC編程仍是Windows Form編程,美工(設計人員)設計出來的界面都須要由程序員使用Visual Studio來實現。程序員不是美工,VS也幹不過PS……越俎代庖永遠是高效分工的大敵。現在,爲了支持WPF程序設計,微軟推出了專門的、使用XAML語言進行UI設計工具——Expression Studio,使用它就像使用PhotoShop和Dreamweaver同樣,設計出來的結果保存爲XAML文件,程序員能夠直接拿來用;當UI有變動時,程序員只消用新版XAML文件替換舊版便可。
XAML小試牛刀
讓咱們實現這樣一個小小的需求,徹底使用XAML代碼而不須要C#來參與。用戶須要一個窗口,裏面有一個TextBox和一個Button,而且窗口的背景是藍色的過渡色。
我保證:真的一行C#代碼都沒寫!是否是足以讓Windows Form程序員豔羨不已?!
一切實現都是使用XAML語言完成的——你可使用Visual Studio 2008的XAML設計器來完成,也可使用Expression Studio來更專業地完成設計。下面是它的XAML代碼,你如今只須要看個大概,後面的文章裏,我會一個詞一個詞爲你解釋。
<
Window
x
:
Class
="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<
Grid
>
<
Grid.Background
>
<
LinearGradientBrush
>
<
GradientStop
Offset
="0"
Color
="Blue"></
GradientStop
>
<
GradientStop
Offset
="0.5"
Color
="LightBlue"></
GradientStop
>
</
LinearGradientBrush
>
</
Grid.Background
>
<
TextBox
Height
="23"
Margin
="10,10,10,0"
Name
="textBox1"
VerticalAlignment
="Top"
Text
="Hello WPF!" />
<
Button
Height
="23"
HorizontalAlignment
="Right"
Margin
="0,40,10,0"
Name
="button1"
VerticalAlignment
="Top"
Width
="75">
WPF
</
Button
>
</
Grid
>
</
Window
>
我們再來一個例子:這回的需求是這樣的——UI上有一個TextBox和一個Slider,要求Slider的滑塊滑動時TextBox的文本顯示Slider的值;當TextBox裏的文本改變時,就讓Slider的滑塊與之同步。
對於一個有經驗的Windows Form開發老手來講,他的思路是這樣的:
- 在UI上拖放控件
- 爲Slider的ValueChanged事件添加響應函數(事件處理函數),函數中將Slider的Value屬性(double類型)轉換成一個string類型的值並賦給TextBox的Text屬性。
- 爲TextBox的TextChanged事件添加響應函數,對TextBox的Text屬性進行檢驗,看看它是否能解析爲一個double值(新手經常忘記這一點而致使bug)而且落在Slider的取值範圍內,若是一切順利,就把它賦給Slider的Value屬性。
Now,你是一個WPF新手,但你能夠作的比一個Windows Form老手還好!請打開Visual Studio 2008,新建一個WPF Application,而後把下面的代碼copy到XAML設計器裏。
<
Window
x
:
Class
="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<
Grid
>
<
Grid.Background
>
<
LinearGradientBrush
>
<
GradientStop
Offset
="0"
Color
="Blue"></
GradientStop
>
<
GradientStop
Offset
="0.5"
Color
="LightBlue"></
GradientStop
>
</
LinearGradientBrush
>
</
Grid.Background
>
<
TextBox
Height
="23"
Margin
="10,10,10,0"
Name
="textBox1"
VerticalAlignment
="Top"
Text
="{
Binding
ElementName
=slider1,
Path
=Value,
UpdateSourceTrigger
=PropertyChanged}" />
<
Slider
Height
="21"
Margin
="10,40,10,0"
Name
="slider1"
VerticalAlignment
="Top"
Maximum
="100" />
</
Grid
>
</
Window
>
看你,你也能夠一句C#代碼都不寫就完成漂亮的程序!
我猜已經有同窗開始「暈代碼」了。徹底沒有必要!這些代碼80%都是VS自動生成的,並且它們的結構的很是簡單——箱子裏裝着一個口袋,口袋裏裝着兩個核桃。上面這段程序最重要的一句就是:
Text
="{
Binding
ElementName
=slider1,
Path
=Value,
UpdateSourceTrigger
=PropertyChanged}"
,便可以說它是WPF最精華的部分,也能夠說它是與Windows Form開發相比變化最大的地方,它就是——Data Binding(數據關聯)。這兩個月來,我幾乎每天與這個東西打交道。後面的文章中,咱們將仔細學習如何使用它。
TO BE CONTINUE...