筆記 簡譯 XAML揭秘 2

2021-05-23 12:06:24 字數 4705 閱讀 5736

屬性(property)元素

wpf 的一大特色就是支援豐富的組合,下面的例子建立了乙個中間是乙個方塊的按鈕(按鈕的標題已經不僅僅 是文字了):

system.windows.controls.

button

b =

new

system.windows.controls.

button

();

system.windows.shapes.

rectangle

r =

new

system.windows.shapes.

rectangle

();

r.width = 40;

r.height = 40;

r.fill = system.windows.media.

brushes

.black;

b.content = r;

// 將按鈕的內容設定為方塊

按鈕的content

屬性是system.object

型別的,因此可以放置這個方塊。通過**我們可以非常輕鬆地設定按鈕的內容,但是我們應該如何通過

xaml

來實現相同的工作呢?我們可以給

content

屬性 設定什麼字串值才能夠使之與前面的

c#**等價呢?實際上,並不存在這樣的字元 串值。不過

wpf提供了另一種設定這種複雜屬性值的語法:屬性元素(

property element

),如:

> 現在

button

的content

屬性是xml

元素而不是

xml屬性,這段

xaml

**與前面的

c#**等價。屬性元素的形式總是

typename.propertyname

,它們總是包含在

typename

物件 元素之中,且它們不能包含自己的

xml屬性。

屬性元素也可以用於簡單屬性,如下兩段

xaml

代 碼完全等價:

型別轉換器

上面例子的等價

c#**如下:

system.windows.controls.

button

b =

newsystem.windows.controls.

button

();

b.content =

"ok";

b.background = system.windows.media.

brushes

.white;

注意到xaml

中的background

屬性,「

white

」字串是如何與

system.windows.media.brushes.white

等價的呢?這個用法展示了一種在

xaml

中使用字串設定屬性的方法。需要特別注意的是,需要被設定的屬性的型別並非

system.string

或system.object

。在這種情況下,

xaml

解析器/

編譯器必須去尋找型別轉換器。型別轉換器可 以把字串轉換成需要的資料型別。

wpf為許多公共型別提供了型別轉換器,如

brush

等。它們都從

typeconverter

派生(如

brushconverter

等)。當然,我們也可以為自己的型別編寫相應的型別轉換器。與

xaml

不同,型別轉換器的名稱通常支援大小寫不敏感的字串。

如果brush

沒有型別轉換器,我們就必須使用屬 性元素語法在

xaml

中設定background

屬性了,如下:

同樣地,當

color

屬性沒有類 型轉換器的時候,我們必須如下編寫

上面的例子仍舊需要型別轉換器來轉換「

255」(a、

r、g、

b屬性)到

byte

,否則程式將不能繼續。因此,型別 轉換器不僅增強了

xaml

的可讀性,而且使得上述概念得以實現,這是其他方式做不到的。

儘管c#

**可以產生與

xaml

相同的結果,但在程式**當中,並非使用了相同的型別轉換機制。下面的**非常準確地展示了在執行時 返回並執行合適的型別轉換器:

system.windows.controls.

button

b =

new

system.windows.controls.

button

();

b.content =

"ok";

b.background = (

brush

)system.componentmodel.

typedescriptor

.getconverter(

typeof

(brush

)).converterfrominvariantstring(

"white");

注意:拼錯「

white

」不會導致 編譯錯誤(在

vs中會有警告),但會導致執行時異常。

筆記 簡譯 XAML揭秘 4

子物件元素 xaml 檔案與xml 檔案類似,必須有乙個根物件元素,自然 xaml 也支援子物件元素。乙個物件元素可以有三種型別的子元素 內容屬性 content property 值 集合項 collection items 或可以被轉換為父類的值。內容屬性 大多數wpf 類設計了乙個可以被設定為...

第1章 為什麼創造WPF 第2章 XAML揭秘

1.2 步入wpf 下面是wpf的一些亮點 廣泛整合 各種 型別都能組合起來並一起呈現 與解析度無關 因為wpf使用向量圖形 硬體加速 wpf是基於direct3d建立的,工作全部是由gpu完成的 宣告式程式設計 富創作和定製 易於部署 2.1 xaml 定義 xaml是一種相對簡單 通用的宣告式程...

筆記 簡譯 WPF的新特性 路由事件(1)

路由事件 routed event 就像 wpf在 net 屬性之上新增了許多基礎結構一樣,它也在 net 事件之上新增了許多基礎結構。路由事件是一種與樹上元素協同工作的事件,當它被觸發後,能夠沿著邏輯樹和視覺樹上 下傳遞,觸發每個子元素的對應事件,不需要任何自定義的 事件路由幫助大多數應用程式遮蔽...