是否可以在代码后面声明一个名称空间

时间:2013-12-03 12:17:29

标签: wpf xaml

是否可以声明名称空间,如:

<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        x:Class="MyApp.MainWindow"/>

在代码背后,例如在构造函数中。

public MainWindow()
{
    // ... here
}

目的:减少冗长;在一个地方声明名称空间并使用继承。

编辑:我尝试添加

[assembly: XmlnsDefinition("http://mycompany/myapp", "clr-namespace:MyApp.Controls")]
[assembly: XmlnsPrefix("http://mycompany/myapp", "myc")]

AssemblyInfo.cs 但构建完成时出现错误“名称空间前缀”myc“未定义”。

所以我在与xaml文件所在的项目相同的项目中使用attirbutes。

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

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

(完全披露:我之前的回答是here提出的类似问题。

答案 1 :(得分:1)

不,命名空间是XML standard的一部分,与xaml / .Net

无关

如果您的名称空间是在后面的代码中声明的,那么您的XAML将不是有效的XML文档。