2010-07-25 122 views
1

我已閱讀,XML命名空間值是任意字符串值。但是在本書的下一段中,我讀到:這個命名空間(xmlns:x)包含在xaml規範中定義的所需語言組件,例如設置對象名稱的能力。混淆XAML命名空間值

請人清除了我這條線。

因爲這個字符串不映射到.NET Framework中的任何命名空間或組裝或任何東西,那麼怎麼能這個命名空間包含x中的語言成分或類型,如名稱:名稱?

<UserControl x:class="Chapter03.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    width="400" height="300"> 

      <Grid x:Name="LayoutRoot" Backgroud="White"> 
      </Grid> 

</UserControl> 
+0

指定版本的Xaml解析已3和4之間改變 – AnthonyWJones 2010-07-26 11:57:53

回答

3

恰恰相反,這些名稱空間確實有意義並映射到CLR命名空間。例如,System.Windows組件包含以下屬性:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls.Primitives")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Ink")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Input")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Media")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Media.Animation")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Media.Effects")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Media.Imaging")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Media.Media3D")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Automation")] 
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml", "System.Windows.Markup")] 

這些屬性映射的XML名稱空間「http://scemas.microsoft.com/winfx/2006/xaml/presentation」到該組由所述屬性進行定義的CLR名稱空間。

您還可以使用類似「clr-namespace:System.Windows.Controls; assembly = System.Windows」的字符串顯式引用clr命名空間(不使用XmlnsDefinitionAttribute)。 XmlnsDefinitionAttribute允許將多個CLR名稱空間映射到單個Xml名稱空間中。

xmlns:x是一個特殊的預定義名稱空間,它包含不一定映射到CLR類型的XAML語言功能(例如x:Name,x:Key,x:Class等)。