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

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