日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

闲话WPF之七(XAML的向前兼容性)

發(fā)布時(shí)間:2024/4/14 asp.net 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 闲话WPF之七(XAML的向前兼容性) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前一個(gè)Post當(dāng)中,我們簡(jiǎn)單介紹了XAML的向后兼容性,以及利用標(biāo)記兼容性實(shí)現(xiàn)注釋的功能。現(xiàn)在,我們接著討論XAML的向前兼容性問題。

同樣地,我們用一個(gè)簡(jiǎn)單的例子來幫助說明XAML的向前兼容性。假設(shè)有一個(gè)自定義的CLYLButton,實(shí)現(xiàn)了一個(gè)Light屬性。在V1版本它的默認(rèn)屬性值是Blue(藍(lán)光)。在V2版本中支持屬性值Green(綠光)。假設(shè)我們?cè)诔绦蛑欣肔ight屬性實(shí)現(xiàn)了綠光效果。但是,如果恰好目標(biāo)機(jī)器上的V2版本意外地被替換為了V1版本。此時(shí),程序的行為應(yīng)該怎么樣呢?崩潰,不,我們希望它在沒有V2的情況下能利用V1版本的默認(rèn)值實(shí)現(xiàn)藍(lán)光效果。如何實(shí)現(xiàn)且看XAML標(biāo)記的向前兼容性。向前兼容性表示通過標(biāo)記兼容性名字空間的Ignorable屬性標(biāo)識(shí)元素、屬性和類,使它們可以動(dòng)態(tài)的支持向前版本。

<CLYLButton V2:Light="Green"?
????? xmlns="...assembly-v1-uri..."
????? xmlns:V2="...assembly-V2-uri..."
????? xmlns:mc=http://schemas.micrsoft.com/winfx/2006/markup-compatibility
????? mc:Ignorable="V2" />

這就利用了標(biāo)記兼容性名字空間的Ignorable屬性。mc:Ignorable=”V2”表示所有用V2前綴關(guān)聯(lián)的名字空間中元素或者屬性都是可以忽略的。如果現(xiàn)在只有V1版本的CLYLButton,上面的代碼就被XAML加載器解釋為:

<CLYLButton?Light=”Blue” xmlns=”… assembly-V1-uri …”/>

如果現(xiàn)在有V2版本的CLYLButton,上面的代碼將被XAML加載器解釋為:

<CLYLButton Light=”Green” xmlns=”… assembly-V2-uri …”/>

XMAL標(biāo)記兼容性除了可應(yīng)用在屬性上,還可以應(yīng)用在元素之上。仍然通過例子進(jìn)行說明,定義如下的一個(gè)類:

[ContentProperty("Buttons")]
??? public class CElement {
??????? List<CLYLButton> _buttons = new List<CLYLButton>();
??????? public List<CLYLButton> Buttons { get { return _buttons; }
}

關(guān)于ContentProperty的用法可以參考MSDN文檔ContentPropertyAttribute Class

同樣,我們可以如下編寫XAML代碼,使其可以同時(shí)兼容兩個(gè)版本的CElement。

<CElement mc:Ignorable="V2"
????? xmln="...assembly-v1-uri..."
????? xmlns:V2="...assembly-V2-uri..."
????? xmlns:mc="http://schemas.micrsoft.com/winfx/2006/markup-compatibility">
????? <CLYLButton Light="Blue" />
????? <V2:CLYLButton Light="Green"/>
</CElement>

這樣,如果加載器有V2版本,則Green屬性值生效。如果沒有則被忽略。類似地,我們還可以完全自動(dòng)地處理名字空間的類:

<CElement mc:Ignorable="v2"
????? xmln="...assembly-v1-uri..."
????? xmlns:V2="...assembly-v2-uri..."
????? xmlns:mc="http://schemas.micrsoft.com/winfx/2006/markup-compatibility">
????? <V2:Favor/>
</CElement>

加載時(shí),如果沒有V2版本存在,Favor類實(shí)例同樣將被忽略。

在Markup Compatibility中,除了有前面介紹的Comment、Ignorable屬性修飾外,另一個(gè)有趣的就是AlternateContent。利用AlternateContent,我們能方便的實(shí)現(xiàn)可選內(nèi)容。比如,我們的程序使用了V2版本Assembly的CLYLButton類,但是,如果沒有找到這個(gè)Assembly,那么它對(duì)應(yīng)的內(nèi)容自動(dòng)用另一個(gè)指定版本V1替換,而不是兼容性體現(xiàn)的忽略。看下面的例子:

<CElement mc:Ignorable="v2"
????? xmln="...assembly-v1-uri..."
????? xmlns:v2="...assembly-v2-uri..."
????? xmlns:mc="http://schemas.micrsoft.com/winfx/2006/markup-compatibility">
????? <mc:AlternateContent>
??????????? <mc:Choice Requires="V2">
????????????????<CLYLButton Light="Green" Shape="Dog" />
??????????????? <V2:Favor/>
??????????? </mc:Choice>
??????????? <mc:Fallback>
??????????????? <CLYLButton Light="Blue"/>
??????????? </mc:Fallback>
???????</mc:AlternateContent>
</CElement>

這一段XAML代碼在有V1版本的Assembly時(shí)將被視為:

<CElement xmln="...assembly-v1-uri...">
??????? <CLYLButton Light="Blue"/>
</CElement>

如果有V2版本的Assembly,編譯的結(jié)果如下:

<CElement xmln="...assembly-v1-uri...">
??????? <CLYLButton Light="Green"/>
?????? <Favor/>
</CElement>

轉(zhuǎn)載于:https://www.cnblogs.com/YilingLai/archive/2006/12/21/599117.html

總結(jié)

以上是生活随笔為你收集整理的闲话WPF之七(XAML的向前兼容性)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。