閒話WPF之六(XAML的標記相容性(Markup Compaibility))

weixin_34377065發表於2006-12-20

繼續XAML的話題,在前一個Post當中簡單介紹了XAML的型別轉換器(TypeConverters)。這次介紹一些XAML標記相容性(Markup Compatibility)的相關內容。

利用XAML標記相容性實現更加強大的註釋功能

寫過XAML的朋友應該都知道:在XAML中可以通過<!--****-->標記來實現註釋。但是,利用XAML標記相容性,還提供了其它更加強大的註釋功能。
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   
xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006
    xmlns:c="Comment"
    mc:Ignorable="c">
   <Canvas>
    <Button c:Width="100" Height="50">Hello</Button>
   </Canvas>
</Window>

看見了Width前面的c字首嗎?它的作用就是註釋掉Width屬性。是不是感覺比標記註釋的方法簡單。而且這個c前面不但可以應用在屬性上,也可以直接應用在例項上,如下:

<Window
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:mc=http://schemas.openxmlformats.org/markup-compatibility/2006
    xmlns:c="Comment"
    mc:Ignorable="c">
 <Canvas>
    <c:Button Width="100" Height="50">Hello</c:Button>
 </Canvas>
</Window>

上面的程式碼就全部註釋掉了Button例項。當然,這種方法不建議在最後的釋出XAML文件中出現。只適合在XAML文件的開發過程中使用。

XAML標記的向後相容性

XAML支援XAML文件的向前和向後相容性。為了幫助說明XAML標記的向後相容性,我們看一個自定義的View類,其中定義了一個Color型別的顏色屬性Color_Prop

public class CLYLView
{
        Color _color;        
       public Color Color_Prop { get { return _color; } set { _color = value; } }
}

很簡單,在XAML中,我們可以如下使用這個CLYLView類:

<CLYLView Color=Red xmlns=”… assembly-V1-uri…”>

注意其中的xmlns=”… assembly-V1-uri…”,這就是一個所謂的XmlnsCompatibleWith屬性。通過它我們指定了包含CLYLView的特定Assembly

現在,我們向V2版本的CLYLView新增了一個Content屬性。如下所示:

public class CLYLView
{
        Color _color;
       Content _content;
       public Color Color_Prop { get { return _color; } set { _color = value; } }
       public Content Content_Prop { get { return _content; } set { _content = value; } }

}

現在我們可以這樣使用V2版本的CLYLView例項:

<CLYLView Color=Red Content=Unknown xmlns=... assembly-v2-uri…”/>

但是,我們仍然希望在V2版本的CLYLView支援V1版本。滿足這種需求,我們可以用XmlnsCompatableWith宣告一個新的Assembly與老的Assembly相容。XAML載入器看到了XmlnsCompatableWith屬性,就會把預設地把所有對V1的引用處理為V2的引用。

向後相容最大的一個好處就是:當我們只有新版的Assembly時,所有對老版Assembly的引用仍然是可讀的,不會出現任何的錯誤。

相關文章