WPF入門一 WPF和XAML簡介

2021-08-18 13:20:41 字數 2899 閱讀 2363

什麼是wpf

windows presentation foundation的簡稱。專門用來編寫程式表示層的技術和工具。

學習wpf的好處:

學習wpf技術可以為wcf的學習錦上添花。wf設計工作流,而設計wf的語言就是xaml。學習wpf後,silverlight可以算是會了80%,因為silverlight可謂wpf的乙個子集,是wpf的網路版。它在wpf的基礎上,去掉一些不常用的功能,簡化了一些功能的實現,新增網路通訊功能,最終讓wpf實現在瀏覽器中。另外silverlinght是wp7手機平台。所以學習wpf後,連手機平台上的程式也會寫了。

為了使**解耦,人們研究出各種各樣的設計模式,如mvc,mvp。在wpf出現之前,winform和webform等技術均使用"事件驅動":由事件→訂閱→事件處理器 關係交織在一起,儘管可以使用mvc,mvp,但是一不小心就會使睫毛邏輯和業務邏輯糾纏在一起,造成**難懂,bug難排。wpf技術則是在開發理念的基礎上一次公升級,由"事件驅動"變為"資料驅動"。

事件驅動:使用者每一次操作都會觸發程式發生乙個事件,事件發生後,用於響應事件的處理器就會執行,時間處理器就是乙個方法(函式),在這個方法中,程式可以處理資料或者呼叫別的方法。依次完成了對業務需求的滿足。可見事件驅動時代的資料是靜態的被動的。介面控制項是主動的,介面邏輯與業務邏輯之間的橋梁是事件。

資料驅動,整好相反,當資料發生變化事,會主動通知介面控制項,推動控制項展示最新的資料。同時使用者對控制項的操作會直接送達資料,就好像控制項是"透明"的,可見,在資料驅動理念中,資料佔主動地位,控制項和控制項事件被弱化,(控制項事件一般只參與介面邏輯,不再染指業務邏輯,使程式複雜度得到有效控制)wpf中,資料與控制項關係就是哲學中內容與形式的關係,內容決定形式,所以資料驅動介面,這符合哲學原理。

優點:1.可以設計出專業的ui和動畫(好用)

2.不需要專業的程式設計知識,簡單易懂,結構清晰。(易學)

3.使設計師能直接參與軟體開發,隨時溝通,無需二次轉化(高效)

4.實現了ui和邏輯的分離。(解耦)

關於解耦:自從應用程式從控制台(console user inte***ce,cui)公升級到圖形使用者介面(graphic user inte***ce,gui)後,程式設計師們就一直追求將檢視view**和邏輯**分離。因為如果檢視邏輯和業務邏輯糾纏在一塊構成高耦合度,就會造成1.了解**困難,2.維護困難,(對於乙個應用程式來說,後期維護的成本 )會大大超過開發成本,這是因為無論是ui的改變或者出現了bug,都會導致大量**的修改。)3.重用性低。(高耦合度的設計如果需要更改乙個新view,幾乎要變動全部**,而低耦合的設計例如三層架構,只需更改view即可。而不用管業務邏輯和底層。xaml真正實現了ui與邏輯 的分離,xaml是一種單純的宣告型語言,它只能用來宣告ui元素,繪製ui和動畫。根本無法在其中新增程式邏輯,這就強制地把邏輯**從ui趕走了)

新建一wpf專案,會生成一系列的檔案。

properties:放資源和配置資訊。

references引用類庫。

window.xaml,我們要建的wpf窗體都類似window.xaml,xaml是設計ui的,視覺化編輯,xaml.cs是後台**。

xaml**分析:

語法xml派生而來,所以遵循xml語法,標籤必須閉合,每個標籤宣告乙個元素(對應記憶體中的乙個物件:xaml是"宣告"式語言,當宣告了乙個標籤就意味著宣告了乙個物件,物件之間的層級關係要麼是並列要麼是包含)。標籤中有屬性。

非空標籤:

空標籤:

關於property和attribute

property是物件導向的範疇,是乙個類的屬性,如年齡,性別

attribute特徵,語言層面上為了區分a和b加attribute來區分,採用鍵值對,attribute的範疇要大於property。通常包含關係,因為大多數情況property也是attribute,即相互對應。

模板**解析:

如圖:第四行就是頂級物件元素window的屬性。

它主要是些繪製ui 的程式集,是表現層(presentation)上的東西。

而屬性:xmlns="命名空間",

xmlns是xml-namespace,繼承xml語法,表示引用了乙個命名空間,類似winfrom的using。

屬性:xmlns:x="命名空間"

語法xmlns[:可選的對映字首]="命名空間",(個人覺得類似winform引用命名空間為了解決下圖問題而是用的using

excel = microsoft.office.interop.excel;

同時因為使用了字首,每次呼叫這個命名空間下的類,介面和屬性等等都要

excel

。同理,如果

xaml

命名空間加了字首,呼叫標籤元素或者屬性也要如此,如

等等。這也是第一行

class

前加n:

的原因每乙個xaml中僅有乙個不帶字首的,那就是預設的命名空間,所以一般把常用的與ui有關的presentation設為預設命名空間,其餘的包括自己引進的都要加字首,使用時也都要加字首。

window x:class="myfirstwpf.window1"是指要解析器把包含class屬性的window標籤編譯成乙個window1類。同時我們發現後台也是乙個window1類,這說明他們都是不分類,類似winform中的後台類與designer類。所以這個解耦與winform原理是一致的。

小結:了解了這麼多,突然發現,有紮實的winform知識,理解wpf是非常有利了,他們在繼承上和解耦思想上和使用上是如此的類似。但也有不同的地方,如winform的designer檔案仍是乙個部分類cs檔案,而wpf公升級為乙個xaml檔案,使用了xml語法,在標籤頂級物件的class中宣告生成了這個部分類。而wpf替代winform就有太多的原因了,文章也說了winform是事件驅動,而wpf是資料驅動原理,符合哲學。較winform更好的解耦,wpf跨平台,包括瀏覽器和移動開發。最後wpf在ui介面上更為漂亮,可以設計專業動畫3d等等

----參考《深入淺出wpf》

學習WPF 了解WPF中的XAML

xaml的簡單說明 xaml是用於例項化.net物件的標記語言,主要用於構建wpf的使用者介面 xaml中的每乙個元素都對映為.net類的乙個例項,例如對映為wpf的button物件 xaml可以在乙個元素中巢狀另乙個元素,例如grid元素可以巢狀button元素 了解xaml visualstud...

學習WPF 了解WPF中的XAML

xaml的簡單說明 xaml是用於例項化.net物件的標記語言,主要用於構建wpf的使用者介面 xaml中的每乙個元素都對映為.net類的乙個例項,例如對映為wpf的button物件 xaml可以在乙個元素中巢狀另乙個元素,例如grid元素可以巢狀button元素 了解xaml visualstud...

WPF程式設計寶典 XAML

巢狀元素 寫在結尾 從這篇文章開始,我們將正式走入wpf的學習,但是要學好wpf你不僅要了解wpf相關的知識,跟要學好一些輔助的知識點,比如今天講的xaml,xaml是一種標記語言,類似於html,因為我之前幫別人寫過網頁和網頁遊戲,所以對這一塊的理解基本上沒什麼問題,但也僅限於簡單的使用,歸根結底...