在XAML中每一個對象元素映射一個實例,而實例屬性可以通過特性(Attributes)進行賦值。在實際項目開發(fā)中,對象元素的屬性值可以是不同數(shù)據(jù)類型,根據(jù)需求不同,經(jīng)常需要對數(shù)據(jù)類型進行轉(zhuǎn)換,就需要使用XAML的類型轉(zhuǎn)換器(Type Converters)。本篇將講解XAML類型轉(zhuǎn)換器的使用。
?
XAML類型轉(zhuǎn)換器基礎(chǔ)
在Windows 8或者Silverlight應(yīng)用開發(fā)中,經(jīng)常會用到類型轉(zhuǎn)換器,例如對按鈕的內(nèi)容進行賦值,代碼如下:
<Button Content=“按鈕演示”/>
按鈕的Content屬性被賦值為字符串類型“按鈕演示”。XAML語法解析器可以將字符串類型轉(zhuǎn)換為對應(yīng)的.Net類型,然后進行賦值操作。而如果在按鈕控件中,添加內(nèi)容文本顏色屬性,
<Button Content=“按鈕演示”Foreground=“Blue”/>
在.Net Framework中,F(xiàn)oreground屬性的數(shù)據(jù)類型是Brush,通過SolidColorBrush對Color進行賦值,在以上代碼中,XAML語法解析器需要使用類型轉(zhuǎn)換器(Type Converters)將簡單文本字符串“Blue”,轉(zhuǎn)換為對應(yīng)的“Brush”畫刷類型,其顏色值為Red=0,Green=0,Blue=255,Aplha=255。 對應(yīng)后臺代碼類型轉(zhuǎn)換是:
Button button = new Button { Foreground = new SolidColorBrush(Color.FromArgb(0, 0, 255, 255)) };
這一轉(zhuǎn)換過程是由.Net Framework內(nèi)置類型轉(zhuǎn)換器實現(xiàn)的,無需開發(fā)人員干涉。
?
轉(zhuǎn)換過程主要是以下兩個 步驟 :
1. XAML語法解析器會檢查需要賦值的屬性是否存在內(nèi)置類型轉(zhuǎn)換器,如果發(fā)現(xiàn)對應(yīng)類型轉(zhuǎn)換器,則將屬性的屬性值字符串轉(zhuǎn)換為對應(yīng)的.Net類型;
2. 如果沒有發(fā)現(xiàn)內(nèi)置類型轉(zhuǎn)換器,XAML語法解析器將查找元素對象中是否使用標(biāo)記擴展(Markup Extensions)調(diào)用自定義類型轉(zhuǎn)換器;
如果以上兩個步驟都沒有發(fā)現(xiàn)對應(yīng)類型轉(zhuǎn)換器的存在,XAML語法解析器將返回類型錯誤。
因為XAML支持標(biāo)記擴展(Markup Extensions),可以在運行時對屬性進行賦值,而屬性值類型通常需要進行對應(yīng)的類型轉(zhuǎn)換才能正常使用,所以在實際項目中,經(jīng)常會用到XAML類型轉(zhuǎn)換器功能,不僅僅局限于項目內(nèi)置類型轉(zhuǎn)換器,同時還允許開發(fā)人員通過繼承TypeConverter類創(chuàng)建自定義類型轉(zhuǎn)換器。
?
XAML類型轉(zhuǎn)換器接口實現(xiàn)
XAML類型轉(zhuǎn)換器的語法格式和使用方法與標(biāo)記擴展(Markup Extensions)相同。在XAML后臺代碼實現(xiàn)接口IValueConverter,在Convert和ConvertBack中創(chuàng)建轉(zhuǎn)換器邏輯代碼,
public
?
object
?Convert(
object
?value,?System.Type?type,?
object
?parameter,?
string
?language)
????????{?????
????????????
throw
?
new
?NotImplementedException(); //這里添加具體類型轉(zhuǎn)換邏輯代碼
????????}
public
?
object
?ConvertBack(
object
?value,?System.Type?type,?
object
?parameter,?
string
?language)
????????{
????????????
throw
?
new
?NotImplementedException(); //如果是雙向綁定,同時需要添加類型轉(zhuǎn)換邏輯代碼
????????}
?
XAML類型轉(zhuǎn)換器簡單實例
在下面的實例,創(chuàng)建一個Windows 8 Metro應(yīng)用,應(yīng)用實現(xiàn)修改成績百分比,使用類型轉(zhuǎn)換器實現(xiàn)同時修改成績文本。
首先創(chuàng)建一個類文件,ValueConverter.cs,然后實現(xiàn)接口IValueConverter,
?
?
?
XAML實例教程系列 :
XAML實例教程系列 - 標(biāo)記擴展(Markup Extensions)?
?
歡迎大家留言交流,或者加入QQ群交流學(xué)習(xí):
22308706(一群) 超級群500人?
37891947(二群) 超級群500人?
100844510(三群) 高級群200人?
32679922(四群) 超級群500人?
23413513(五群) 高級群200人?
32679955(六群) 超級群500人?
88585140(八群) 超級群500人?
128043302(九群 企業(yè)應(yīng)用開發(fā)推薦群) 高級群200人?
101364438(十群) 超級群500人?
68435160(十一群 企業(yè)應(yīng)用開發(fā)推薦群)超級群500人
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
