深入浅出WPF(2)——解剖最简单的GUI程序
生活随笔
收集整理的這篇文章主要介紹了
深入浅出WPF(2)——解剖最简单的GUI程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
深入淺出WPF(2)——解剖最簡單的GUI程序 小序: 從這篇文章開始,我們進(jìn)行XAML語言的上手學(xué)習(xí)。說實(shí)話,XAML這種語言一點(diǎn)也不難。如果把XML看成是“父類”,那么XAML就是XML的一個派生類了,所以XML的概念在XAML中是通用的。What?你不了解XML?沒關(guān)系,反正我們是從頭開始! 正文: 你還能想起學(xué)C/C++的時(shí)候?qū)懙牡谝粋€程序嗎?呵呵,一定是“Hello World”吧!今天我們來解析一個“Hello WPF”。準(zhǔn)備好了嗎?Let's go! 準(zhǔn)備知識 使用VS2008新建一個WPF Application,你立刻就會得到一個看上去是“空”的窗體。窗體這個東西,在Windows Form程序里叫“Form”,在WPF里叫“Window”——喔,Win32 API里也叫Window!是的,你說對了,WPF在某種程度上是向Win32 API的“返璞歸真”! 為什么說它“看上去”是空的呢?實(shí)際上,這個Window的內(nèi)部有一個叫<Grid>的元素(Element),只是這個元素是看不見的,它就像信紙上的“暗格”一樣。 針對XAML文件,是可以進(jìn)行“所見即所得”的可視化設(shè)計(jì)的。你在XAML代碼上做的修改,只要是合乎語法的,那么在設(shè)計(jì)器里就會立刻反映出來(有時(shí)候需要刷新一下)。如果你發(fā)現(xiàn)設(shè)計(jì)器里顯示不出來了,那一定是XAML語句出了問題,最好想辦法修正它。不然的話,在設(shè)計(jì)器里都看不到效果、只能運(yùn)行起來看,這還算什么可視化編程呢?要XAML還有什么意義呢? 在我們正式剖析代碼之前,讓我們牢記兩件事: 1.?????這個世界是一個“組合”的世界——汽車是由一個車身和四個輪子組合成的;飛機(jī)是由機(jī)翅和機(jī)身組合成的。這些組成部分,我們稱之為元素(Element)。 2.?????在XAML文件里,每寫一個元素就相當(dāng)于定義了一個元素所對應(yīng)的.NET Framework類的實(shí)例。 有必要強(qiáng)調(diào)一點(diǎn):如果一個實(shí)體是由一些(同類或者不同類的)子對象組合成的,我們就稱這個實(shí)體為“父元素”、稱這些子對象為“子元素”,因?yàn)楦冈匕釉?#xff0c;所以常把父元素稱為“包含元素”、把子元素稱為“被包含元素”或父元素的“內(nèi)容”——我們需要注意,被包含元素并不等同于包含元素的屬性(property),被包含元素只是包含元素的一個部分。??初聽這句話,肯定是一頭霧水,OK,讓我舉個兩個例子。比如有一個班級,這個班由56個學(xué)生、1個老師、60張桌子、70把椅子組成,那么這些學(xué)生、老師、桌子和椅子,只是這個班級的一些“組成部分”;而這個班級的人數(shù)、班級隸屬的年級、班級的編號是這個班級的屬性。再比如我有一個Window,這個Window里有1個Grid,這個Grid里又包含著3個TextBox、2個Button,那么這1個Grid就是這個Window的子元素,3個TextBox和2個Button又是Grid的子元素;而Window的Name、Icon、尺寸乃至Resources都是這個Window的屬性。 你可能會問,這個道理這么簡單,有什么好強(qiáng)調(diào)的呀? 原因是這樣的:對于C#的類而言,屬性(property)肯定是一個對象(比如Window的Name屬性,它就是一個String類型的對象),這個對象也是類實(shí)例的一個組成部分;而在對這個類進(jìn)行擴(kuò)展的時(shí)候(對這個類進(jìn)行派生),我們新添加進(jìn)來的元素(比如3個TextBox和2個Button)也是類實(shí)例的組成部分。OK,大家看到了,從現(xiàn)實(shí)世界抽象到編程世界來之后,它們的區(qū)別就不那么鮮明了。為了再讓它們的區(qū)別“鮮明”起來,請大家記住兩句話:
????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>
</Window> ?讓我們一個詞一個詞地分析這段代碼。 就像我們遇到復(fù)雜長句時(shí)先要分析它的主干一樣——讓我們暫時(shí)拋開花花綠綠的代碼,看看這段程序的主干是什么。喔~~~這段程序的主干是如此的簡單!就是一個<Window>元素里包含著一個?<Grid>元素。 ??<Window>
????<Grid>
????????
????</Grid>
</Window> ?一個句子的主干找出來之后,句子的大意也就明白了。我們已經(jīng)得到這段程序的主干了,那這段程序說的是什么呢?前面我叮囑大家一定要記住兩件事件。其中一件就是“見到元素就相當(dāng)于創(chuàng)建實(shí)例”。我想你一定會說:這段程序就是在定義一個Window類的實(shí)例,這個實(shí)例的一個組成部分是一個Grid類的實(shí)例。 呵呵,對于這個答案,既可以說它是對的,也可以說它是錯的,為什么呢? 請注意,Window元素的一個attribute是x:Class="HelloWPF.Window1",這個Class就是在告訴我們“嘿!本XAML文件實(shí)際上是這個類的UI部分哦!”。本例中,類名就是等號后面的“HelloWPF.Window1”,也就是說,是HelloWPF名稱空間中的Window1這個類。在項(xiàng)目瀏覽器中找到與這個XAML文件配套的C#文件(XAML文件名.cs),果然能找到這個類。 ??public?partial?class?Window1?:?Window
????{
????????public?Window1()
????????{
????????????InitializeComponent();
????????}
????} 從這個角度來看,上面的答案就是錯的了——因?yàn)檫@段代碼是在定義一個Window1的實(shí)例會是什么樣子。 那為什么又可以說它的對的呢?顯然,Window1是Window類的派生類,根據(jù)多態(tài)的原理,你說Window1“是一個”Window并沒有錯——就像你說“鴨子是一只鳥”一樣正確。在派生過程中,我們使用<Grid>標(biāo)簽為它添加了一個Grid類型的UI成員——派生嗎,一定是要做些擴(kuò)展的。 看到這兒,我想你已經(jīng)猜到了,XAML文件就是用來定義Window1這個類的UI部分(一旦這個類創(chuàng)建了實(shí)例,那這個實(shí)例的UI將與XAML代碼的描述相一致)。微軟通過XAML語言把UI設(shè)計(jì)完全暴露給了我們,讓設(shè)計(jì)師可以像設(shè)計(jì)網(wǎng)頁一樣來設(shè)計(jì)桌面程序的界面。至于這個類的邏輯部分,還是用傳統(tǒng)的C#語言來實(shí)現(xiàn)。這樣,設(shè)計(jì)人員和開發(fā)人員就能各司其職、協(xié)同工作了。 一個類能夠“掰成兩半”來寫,這要?dú)w功于partial這個關(guān)鍵字,使用這個關(guān)鍵字,可以把一個類的代碼分散在多處來實(shí)現(xiàn)。可問題又來了——XAML代碼怎么和C#代碼“對接”啊?呵呵,這個還真不用咱們操心,微軟的XAML解析器本著“進(jìn)村悄悄地,開槍地不要”原則,在背后把這件事完成了。因?yàn)?/span>XAML代碼中沒有邏輯,所以,解析XAML的大部分工作就是按照元素標(biāo)簽的描述把對象創(chuàng)建出來——比如,解析器見到有<Grid>標(biāo)簽出現(xiàn),就會生成與C#代碼new Grid()等價(jià)的代碼。 喘口氣兒……
讓我們繼續(xù)。 XAML名稱空間 如果你問一個初學(xué)XAML的人(碰巧他還沒有XML編程經(jīng)驗(yàn)):最讓他迷惑的是什么?我想他會告訴是:“就是那個x!”老實(shí)講,我就是他們中的一員,初學(xué)的時(shí)候我也很“痛恨”那個x。一會兒是“:x”,一會兒是“x:”……這個x到底是什么呢? 其實(shí)非常簡單——這個x是一個名稱空間、一個使用XML語法聲明的名稱空間。只是XML語言聲明名稱空間的時(shí)候語法比較怪而已。下面,讓我一一為你解釋。 首先,如果你使用C#,那么你對這幾句代碼一定不陌生:
這是對.NET Framework類庫中名稱空間的引用。一旦引用了這些名稱空間,在使用這些名稱空間中的類時(shí)就不并在再類名前加上長長的前綴了。 請大家考慮這樣一種情況:有兩個很長的名稱空間,我需要使用它們中的類,但不巧的是這兩個名稱空間里的類又有很多是重名的……怎么辦呢?呵呵,我們可以使用名稱空間的別名來解決這個問題: using?Software?=?Microsoft.Google.Adobe.RedHat.CA;
using?Hardware?=?IBM.Sun.RedHat.Dell.Lenovo.HP.Oracle; 這樣,即解決了輸入字符過多的問題,又解決了類名沖突的問題:
Software.Company?c1?=?new?Software.Company();
Hardware.Company?c2?=?new?Hardware.Company();
XAML名稱空間跟C#的名稱空間別名類似,但不完全一樣。先讓我們看那個x。x其實(shí)就是一個簡寫的名稱空間啦!xmlns就是XML Namespace的簡寫,意思是要聲明一個名稱空間。 xmlns:x="[url]http://schemas.microsoft.com/winfx/2006/xaml[/url]" 這句話的意思就是:聲明一個名為x的名稱空間(xmlns與名稱空間的名字間用冒號隔開)。后面為什么要跟一個“網(wǎng)址”呢?呵呵,我們都被騙了——那根本不是一個網(wǎng)址,不信你用IE試試。其實(shí),它就是一個普通的字符串,你盡可以把它當(dāng)成“Microsoft.WinFX.XAML”來理解。但值得注意的一點(diǎn)是:這個字符串不只代表著一個名稱空間,而是代表了一組名稱空間,這組名稱空間合稱“XAML語言空間”——因此,它的名字是x。換句話說,這個x相當(dāng)于一下子引用了好幾個名稱空間進(jìn)來,這幾個名稱空間在.NET Framework里都能查到,包含這些名稱空間里的類都是與XAML語言的語法、特性、功能有關(guān)的。 在XAML中,想使用某個名稱空間里的類就要使用“名稱空間+冒號+類名”的格式,所以:
x:Class的意思是使用x名稱空間里名為Class的類。類似地,以后我們還會看到x:Static、x:Type、x:XData等等,這都是在使用x這個名稱空間里的類。 與聲明x名稱空間類似,這兒還有一句:
xmlns="[url]http://schemas.microsoft.com/winfx/2006/xaml/presentation[/url]" 這回的“網(wǎng)址”與前面的不一樣,最后一個詞是“presentation”,顧名思義,這回引用進(jìn)來的一組名稱空間一定是與顯示相關(guān)的。說對了!比如System.Window.Control這個.NET Framework的名稱空間就包含在里面,這個名稱空間里幾乎包含了所有WPF的UI元素(在WPF里,我們稱控件為UI元素)。? 你可能會問:這不是在聲明名稱空間嗎!名字哪兒去了?
問的非常好!當(dāng)xmlns后面沒有跟隨名稱空間的名字時(shí),就相當(dāng)于省去了名稱空間的名字,當(dāng)使用這個名稱空間中的類時(shí)就無需再加前綴(根本沒前綴可加,怎么加?)。換句話說,當(dāng)一個類名前面沒有前綴時(shí),“默認(rèn)”就是此名稱空間里的類。因此,它稱為“默認(rèn)名稱空間”。這個用法跟using?System差不多。BTW:默認(rèn)名稱空間只能有一個。 大家可以動手試試這樣做,把xmlns="[url]http://schemas.microsoft.com/winfx/2006/xaml/presentation[/url]"改成xmlns:n="[url]http://schemas.microsoft.com/winfx/2006/xaml/presentation[/url]",??這時(shí)候程序就編譯不過去了。當(dāng)你把后面的<Grid>元素改成<n:Grid>和</n:Grid>后,就又可以通過編譯了。 ?最后,Title="Window1"?Height="300"?Width="300"的意思是設(shè)置Window1類(也可以說是Window類)的幾個實(shí)例屬性。這種語法稱為“使用標(biāo)簽的attribute設(shè)置對象的property”,碰巧,attribute和property這兩個詞都被譯為了“屬性”,所以這句話就沒法翻譯了。除了使用attribute設(shè)置對象property的語法外,XAML還支持使用子元素方式設(shè)置元素屬性的語法。下面這段代碼與原代碼是等價(jià)的: <Window?x:Class="HelloWPF.Window1"
????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
????<Window.Title>Window1</Window.Title>
????<Window.Height>300</Window.Height>
????<Window.Width>300</Window.Width>
????<Grid>
????????
????</Grid>
</Window>? 大家注意啦!<Window.Title>、<Window.Height>、<Window.Width>叫做“屬性元素”,表示它雖然是一個子元素,但它是父元素的一個屬性;而<Grid>則是一個普通元素,而非<Window>元素的屬性——它們雖然都是<Window>的組成元素,但不是一個圈子里的(請?zhí)D(zhuǎn)到上面,看看準(zhǔn)備知識)。總有初學(xué)者問我:“反正Title也是Window的一個組成部分,能不能寫成<Title>Window1</Title>啊?”幽默點(diǎn)講,XAML解析器沒那么聰明;地道的說法是,從物理上講,并沒有<Title>這個UI元素;從XAML語法上講,這樣會造成語義上的含混、遠(yuǎn)不及<Window.Title>來得清晰。 啰嗦一句:當(dāng)對象的property用一個簡單的string就能描述清楚時(shí),完全沒必要使用子元素式語法小題大作。當(dāng)對象的屬性是一個復(fù)雜的對象時(shí)(你想用attribute式語法都辦不到),再使用子元素式語法。 到此,一個最簡單的WPF程序(的XAML部分)就算分析完了。本文成于倉促,之間有不少不嚴(yán)謹(jǐn)?shù)牡胤?#xff0c;我會慢慢修改。大家有什么好的建議,請?jiān)谖暮笊w樓。 唉~~~看來今天是Hello不了WPF鳥,以后再說吧~~~ ?
本文轉(zhuǎn)自 水之真諦 51CTO博客,原文鏈接:http://blog.51cto.com/liutiemeng/95263,如需轉(zhuǎn)載請自行聯(lián)系原作者
- 屬性對象(元素)是父元素所固有的,子元素則可由設(shè)計(jì)人員來進(jìn)行增減
- 屬性對象(元素)是隸屬于父類的(從父類繼承而來),子元素是在設(shè)計(jì)派生類時(shí)新添加進(jìn)來的
????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>
</Window> ?讓我們一個詞一個詞地分析這段代碼。 就像我們遇到復(fù)雜長句時(shí)先要分析它的主干一樣——讓我們暫時(shí)拋開花花綠綠的代碼,看看這段程序的主干是什么。喔~~~這段程序的主干是如此的簡單!就是一個<Window>元素里包含著一個?<Grid>元素。 ??<Window>
????<Grid>
????????
????</Grid>
</Window> ?一個句子的主干找出來之后,句子的大意也就明白了。我們已經(jīng)得到這段程序的主干了,那這段程序說的是什么呢?前面我叮囑大家一定要記住兩件事件。其中一件就是“見到元素就相當(dāng)于創(chuàng)建實(shí)例”。我想你一定會說:這段程序就是在定義一個Window類的實(shí)例,這個實(shí)例的一個組成部分是一個Grid類的實(shí)例。 呵呵,對于這個答案,既可以說它是對的,也可以說它是錯的,為什么呢? 請注意,Window元素的一個attribute是x:Class="HelloWPF.Window1",這個Class就是在告訴我們“嘿!本XAML文件實(shí)際上是這個類的UI部分哦!”。本例中,類名就是等號后面的“HelloWPF.Window1”,也就是說,是HelloWPF名稱空間中的Window1這個類。在項(xiàng)目瀏覽器中找到與這個XAML文件配套的C#文件(XAML文件名.cs),果然能找到這個類。 ??public?partial?class?Window1?:?Window
????{
????????public?Window1()
????????{
????????????InitializeComponent();
????????}
????} 從這個角度來看,上面的答案就是錯的了——因?yàn)檫@段代碼是在定義一個Window1的實(shí)例會是什么樣子。 那為什么又可以說它的對的呢?顯然,Window1是Window類的派生類,根據(jù)多態(tài)的原理,你說Window1“是一個”Window并沒有錯——就像你說“鴨子是一只鳥”一樣正確。在派生過程中,我們使用<Grid>標(biāo)簽為它添加了一個Grid類型的UI成員——派生嗎,一定是要做些擴(kuò)展的。 看到這兒,我想你已經(jīng)猜到了,XAML文件就是用來定義Window1這個類的UI部分(一旦這個類創(chuàng)建了實(shí)例,那這個實(shí)例的UI將與XAML代碼的描述相一致)。微軟通過XAML語言把UI設(shè)計(jì)完全暴露給了我們,讓設(shè)計(jì)師可以像設(shè)計(jì)網(wǎng)頁一樣來設(shè)計(jì)桌面程序的界面。至于這個類的邏輯部分,還是用傳統(tǒng)的C#語言來實(shí)現(xiàn)。這樣,設(shè)計(jì)人員和開發(fā)人員就能各司其職、協(xié)同工作了。 一個類能夠“掰成兩半”來寫,這要?dú)w功于partial這個關(guān)鍵字,使用這個關(guān)鍵字,可以把一個類的代碼分散在多處來實(shí)現(xiàn)。可問題又來了——XAML代碼怎么和C#代碼“對接”啊?呵呵,這個還真不用咱們操心,微軟的XAML解析器本著“進(jìn)村悄悄地,開槍地不要”原則,在背后把這件事完成了。因?yàn)?/span>XAML代碼中沒有邏輯,所以,解析XAML的大部分工作就是按照元素標(biāo)簽的描述把對象創(chuàng)建出來——比如,解析器見到有<Grid>標(biāo)簽出現(xiàn),就會生成與C#代碼new Grid()等價(jià)的代碼。 喘口氣兒……
讓我們繼續(xù)。 XAML名稱空間 如果你問一個初學(xué)XAML的人(碰巧他還沒有XML編程經(jīng)驗(yàn)):最讓他迷惑的是什么?我想他會告訴是:“就是那個x!”老實(shí)講,我就是他們中的一員,初學(xué)的時(shí)候我也很“痛恨”那個x。一會兒是“:x”,一會兒是“x:”……這個x到底是什么呢? 其實(shí)非常簡單——這個x是一個名稱空間、一個使用XML語法聲明的名稱空間。只是XML語言聲明名稱空間的時(shí)候語法比較怪而已。下面,讓我一一為你解釋。 首先,如果你使用C#,那么你對這幾句代碼一定不陌生:
這是對.NET Framework類庫中名稱空間的引用。一旦引用了這些名稱空間,在使用這些名稱空間中的類時(shí)就不并在再類名前加上長長的前綴了。 請大家考慮這樣一種情況:有兩個很長的名稱空間,我需要使用它們中的類,但不巧的是這兩個名稱空間里的類又有很多是重名的……怎么辦呢?呵呵,我們可以使用名稱空間的別名來解決這個問題: using?Software?=?Microsoft.Google.Adobe.RedHat.CA;
using?Hardware?=?IBM.Sun.RedHat.Dell.Lenovo.HP.Oracle; 這樣,即解決了輸入字符過多的問題,又解決了類名沖突的問題:
Software.Company?c1?=?new?Software.Company();
Hardware.Company?c2?=?new?Hardware.Company();
XAML名稱空間跟C#的名稱空間別名類似,但不完全一樣。先讓我們看那個x。x其實(shí)就是一個簡寫的名稱空間啦!xmlns就是XML Namespace的簡寫,意思是要聲明一個名稱空間。 xmlns:x="[url]http://schemas.microsoft.com/winfx/2006/xaml[/url]" 這句話的意思就是:聲明一個名為x的名稱空間(xmlns與名稱空間的名字間用冒號隔開)。后面為什么要跟一個“網(wǎng)址”呢?呵呵,我們都被騙了——那根本不是一個網(wǎng)址,不信你用IE試試。其實(shí),它就是一個普通的字符串,你盡可以把它當(dāng)成“Microsoft.WinFX.XAML”來理解。但值得注意的一點(diǎn)是:這個字符串不只代表著一個名稱空間,而是代表了一組名稱空間,這組名稱空間合稱“XAML語言空間”——因此,它的名字是x。換句話說,這個x相當(dāng)于一下子引用了好幾個名稱空間進(jìn)來,這幾個名稱空間在.NET Framework里都能查到,包含這些名稱空間里的類都是與XAML語言的語法、特性、功能有關(guān)的。 在XAML中,想使用某個名稱空間里的類就要使用“名稱空間+冒號+類名”的格式,所以:
x:Class的意思是使用x名稱空間里名為Class的類。類似地,以后我們還會看到x:Static、x:Type、x:XData等等,這都是在使用x這個名稱空間里的類。 與聲明x名稱空間類似,這兒還有一句:
xmlns="[url]http://schemas.microsoft.com/winfx/2006/xaml/presentation[/url]" 這回的“網(wǎng)址”與前面的不一樣,最后一個詞是“presentation”,顧名思義,這回引用進(jìn)來的一組名稱空間一定是與顯示相關(guān)的。說對了!比如System.Window.Control這個.NET Framework的名稱空間就包含在里面,這個名稱空間里幾乎包含了所有WPF的UI元素(在WPF里,我們稱控件為UI元素)。? 你可能會問:這不是在聲明名稱空間嗎!名字哪兒去了?
問的非常好!當(dāng)xmlns后面沒有跟隨名稱空間的名字時(shí),就相當(dāng)于省去了名稱空間的名字,當(dāng)使用這個名稱空間中的類時(shí)就無需再加前綴(根本沒前綴可加,怎么加?)。換句話說,當(dāng)一個類名前面沒有前綴時(shí),“默認(rèn)”就是此名稱空間里的類。因此,它稱為“默認(rèn)名稱空間”。這個用法跟using?System差不多。BTW:默認(rèn)名稱空間只能有一個。 大家可以動手試試這樣做,把xmlns="[url]http://schemas.microsoft.com/winfx/2006/xaml/presentation[/url]"改成xmlns:n="[url]http://schemas.microsoft.com/winfx/2006/xaml/presentation[/url]",??這時(shí)候程序就編譯不過去了。當(dāng)你把后面的<Grid>元素改成<n:Grid>和</n:Grid>后,就又可以通過編譯了。 ?最后,Title="Window1"?Height="300"?Width="300"的意思是設(shè)置Window1類(也可以說是Window類)的幾個實(shí)例屬性。這種語法稱為“使用標(biāo)簽的attribute設(shè)置對象的property”,碰巧,attribute和property這兩個詞都被譯為了“屬性”,所以這句話就沒法翻譯了。除了使用attribute設(shè)置對象property的語法外,XAML還支持使用子元素方式設(shè)置元素屬性的語法。下面這段代碼與原代碼是等價(jià)的: <Window?x:Class="HelloWPF.Window1"
????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
????<Window.Title>Window1</Window.Title>
????<Window.Height>300</Window.Height>
????<Window.Width>300</Window.Width>
????<Grid>
????????
????</Grid>
</Window>? 大家注意啦!<Window.Title>、<Window.Height>、<Window.Width>叫做“屬性元素”,表示它雖然是一個子元素,但它是父元素的一個屬性;而<Grid>則是一個普通元素,而非<Window>元素的屬性——它們雖然都是<Window>的組成元素,但不是一個圈子里的(請?zhí)D(zhuǎn)到上面,看看準(zhǔn)備知識)。總有初學(xué)者問我:“反正Title也是Window的一個組成部分,能不能寫成<Title>Window1</Title>啊?”幽默點(diǎn)講,XAML解析器沒那么聰明;地道的說法是,從物理上講,并沒有<Title>這個UI元素;從XAML語法上講,這樣會造成語義上的含混、遠(yuǎn)不及<Window.Title>來得清晰。 啰嗦一句:當(dāng)對象的property用一個簡單的string就能描述清楚時(shí),完全沒必要使用子元素式語法小題大作。當(dāng)對象的屬性是一個復(fù)雜的對象時(shí)(你想用attribute式語法都辦不到),再使用子元素式語法。 到此,一個最簡單的WPF程序(的XAML部分)就算分析完了。本文成于倉促,之間有不少不嚴(yán)謹(jǐn)?shù)牡胤?#xff0c;我會慢慢修改。大家有什么好的建議,請?jiān)谖暮笊w樓。 唉~~~看來今天是Hello不了WPF鳥,以后再說吧~~~ ?
本文轉(zhuǎn)自 水之真諦 51CTO博客,原文鏈接:http://blog.51cto.com/liutiemeng/95263,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的深入浅出WPF(2)——解剖最简单的GUI程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Liferay激活Navigation和
- 下一篇: 当root.sh与ORA-15031相遇