为什么有XAML名称空间是URLS?

时间:2011-03-22 10:49:30

标签: xaml namespaces

在代码顶部的Silverlight / WPF xaml中,您拥有命名空间/导入类型声明。我可以很容易地理解这些声明如何指向一个程序集,以便可以从中加载类型等。我不明白(以及到目前为止我还没有想到的)是这些命名空间在指向网址时的工作方式,例如。

http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit

查看此网址会给我一个错误,所以不要告诉我任何事情。

2 个答案:

答案 0 :(得分:20)

引用程序集的代码中有an attribute you can use将Uri映射到代码名称空间:

[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")]

您可以在AssemblyInfo.cs中包含多个这些属性,允许Xaml中的单个Uri命名空间引用多个代码命名空间。

这使您的命名空间声明更紧凑(因为您可以省略程序集名称)。它还允许您在引用的程序集中重新组织名称空间时具有一定的灵活性,而不会破坏您的标记。

编辑:例如,如果您将Reflector指向PresentationCore程序集,则可以在程序集级别查看此类属性:

[assembly: 
    XmlnsDefinition( "http://schemas.microsoft.com/netfx/2007/xaml/presentation"
                   , "System.Windows.Ink") ]

这是Uri导入映射到代码名称空间的方式。

答案 1 :(得分:2)

据我所知,它们只是符合惯例的URL,任何唯一的标识符都可以。

如果您检查HTML文档类型,它们完全相同,就像没有实际加载一样:)例如:http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdhttp://www.w3.org/TR/html4/strict.dtd

为什么这些网址上没有任何内容是没有意义的,最好有一些实际的引用......