WPF基礎知識學習筆記——序

來源:互聯網
上載者:User

最近公司讓學WPF,簡單學習了一下,這裡做個記錄。不能說是拋磚引玉,就只當是自己的一個簡單總結吧,方便自己以後回顧。

因為學得實在太淺太簡單,所以這裡首先說明一點:本部落格只是針對最最基礎的初學者(就是所謂的完全沒有沒有接觸過C#的程式員);任何對WPF使用超過一周的程式員都可以簡單看看標題即可;至於超過一個月的,請直接忽略本系列,避免浪費時間和口水。

作為序言,我們應該只集中精力弄清楚幾個基本問題:什麼是WPF?為什麼要用WPF?怎麼用WPF?

 

第一,什麼是WPF?

WPF是偉大的M$提出的眾多編程新概念的中的一個,是“Windows Presentation Foundation”的簡稱,翻譯過來大意就是說是開發“展示層”(最簡單的理解就是程式介面)的技術和工具。

 有人問,WPF只做介面的話,背景邏輯怎麼辦?答曰:隨便你怎麼辦。其實,WPF主要就是實現介面相關的內容,對於背景邏輯,包括商務邏輯層和資料層,則不限於你使用什麼樣的技術,比如你可以使用微軟的WCF和WF(你看名字就知道,這本來就是一套,偉大的M$從一開始就為你準備了一桌大餐而不是單獨一道大菜)。

最後,一句話總結什麼是WPF,答曰:做介面的!

科普一下相關概念:被熱炒的Silverlight,其實也是和WPF關係匪淺,有一個說法是Sliverlight本來就是WPF的一個子集,是WPF的“網路版”。

 

第二,為什麼要用WPF?

表面原因:WPF開發介面很好很酷很炫。

直接原因:公司/客戶/老闆/上司 的要求。

間接原因:M$不遺餘力地推廣。

個人總結原因:WPF使用了獨立的XAML語言,使得開發的介面真正和介面後的邏輯分離開了,這樣就帶來了種種方便,比如擅長修改介面的設計人員就不用老是和只會寫代碼的程式員反覆溝通,他們只需要掌握XAML語言,就能設計出非常精巧地介面(XAML語言是什嗎?下面再介紹)。另外,筆者總有點感覺,似乎現在有一種潮流,那就是一切向網路看齊,WPF是針對介面程式的,但是感覺使用了XAML語言後,感覺和HTML的頁面設計風格就很相似了,使用微軟提供的Blend,有網頁設計功底的設計人員就可以愜意地在Windows開發出各種絢麗的介面;從網路上的資料來看,XAML寫的檔案,可以在Windows中被調用,也可以被安裝了Silverlight的瀏覽器訪問,這就極大地節約了開發時間,尤其是其模糊了BS和CS系統的界限,這將使得開發應用於多種用戶端的大型系統變得更加有效率(比如寫一個系統,可以用Windows PC傳統型程式訪問伺服器,也可以用IE訪問伺服器,甚至可以用手機來訪問伺服器,他們的介面可以統一使用XAML來開發)。

 

第三, 怎麼用WPF?

這個問題似乎太大了點,我這裡只能簡單說說最基礎的東西,看了覺得說得太淺了的不許吐槽。

WPF裡面分成兩部分,一部分是XAML語言,一部分是C#代碼。在WPF裡面,這兩部分是獨立到但是又緊密聯絡到一起的。其中,XAML語言是定義介面元素本身的,而C#則是實現介面上各種訊息響應函數的。比如,你點擊一個按鈕,那麼對應的訊息響應函數就可以用C#來完成;但是按鈕本身的形狀、顏色、背景、尺寸等等,則一般都是在XAML中定義的。

獨立:這兩部分內容是分別放在不同的檔案中的,尾碼名分別是.xaml和.cs。開發的時候,完全可以讓介面設計人員開發.xaml檔案的同時,C#程式員開發.cs檔案。

緊密聯絡:在.cs檔案中使用了C#中的partial關鍵字,將一個.xaml檔案和一個.cs檔案中相關的內容結合起來,形成一個類。也就是說,每一個.xaml檔案中定義的xaml對象,實際上也可以看做一個C#中的類。

注意:在WPF中,一些和訊息響應相關的特效,比如”滑鼠移動到指定控制項上,控制項顏色會變“等,這些特效可以由C#用訊息響應來實現,但是也可以通過XAML的Trigger機制來實現;另外,在C#中,可以通過XAML中定義的控制項的名字來訪問指定的控制項,修改控制項的屬性,甚至可以直接建立控制項添加到介面上,實現對WPF介面的控制。從這個意義上說,XAML高手和C#大蝦都可以完成一個漂亮的WPF介面,但是顯然XAML開發的介面顯然比C#更加有優勢,畢竟撇開代碼的通用性不說,使用Blend設計介面的工作效率之高和工作結果之絢麗,就不是傻傻地敲代碼可以比擬的。真實開發的時候,應該很多時候都是設計人員使用Blend完成介面,然後產生的XAML代碼檔案交給C#程式員進行微調,最後產生最終的介面檔案。

C#就不多說了,這裡特別說一下XAML語言的一個基礎概念:屬性賦值的兩種形式。

XAML語言是XML語言的一個子集,換句話說,XML語言的特性XAML都會有。XML的標誌:用形如<></>之類的樹形結構的標籤定義一個個元素和元素的值。在XAML中則是定義了一個個控制項和控制項中的元素,以及<style>之類的東西。注意,和HTML一樣,XAML中設定介面也是用的標記語言。關於標記語言,有一個很基本的概念:屬性的值可以放在<>中用“=”來賦值,也可以在<>外直接用屬性元素(Property Element)來賦值。下面是一個簡單的例子,該例子中,定義了Grid的三行,每行寬度都是60,第一行使用的屬性元素,第二行用的是指派陳述式加字串來進行賦值。這兩種方法是等價的。不過需要注意的是,用指派陳述式的話,代碼比較簡潔;屬性元素賦值,則適用於複雜屬性。比如例子代碼中,實際上Grid.RowDefinitions可以看做是Grid的一個複雜屬性,在屬性中又有若干子屬性,這樣的複雜屬性很難用簡單的字串來賦值。

最後,一定要注意,字串賦值也好,屬性元素也罷,最後實際賦值給屬性的,應該都是對象;至於字串和屬性元素如何轉化成對象,那就得去問微軟了。實際上,如果不用XAML,而是使用C#對屬性進行的話,那麼使用者就會發現,很多情況下,都得自己想辦法來產生一個個對象來賦值給某些屬性。

<Window x:Class="MyFirstWpfApplication.Win_Test1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Win_Test1" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition>
<RowDefinition.Height>
60
</RowDefinition.Height>
</RowDefinition>
<RowDefinition Height="60"/>
<RowDefinition Height="60"/>
</Grid.RowDefinitions>

</Grid>
</Window>

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.