WPF - 基于另一个 xmlns 定义一个 xmlns

WPF - Defining a xmlns based on another xmlns

有没有办法像这样声明命名空间:

xmlns:views="clr-namespace:xxx.xxx.Views"
xmlns:someNestedViews="views.SomeNestedView"

objective 是为了加快 nested/repeated xmlns 声明并使它们更容易 read/maintain。

不,您需要包括整个 CLR 命名空间:xmlns:someNestedViews="xxx.xxx.Views.SomeNestedView"clr-namespace: 语法将 XAML 命名空间映射到 CLR 命名空间。它不映射到另一个 XML 命名空间。

如果您是 Views 命名空间中 类 的作者,您可以使用 XmlnsDefinitionAttribute 指定 XAML 命名空间与多个不同命名空间之间的映射CLR 命名空间,例如:

[assembly: XmlnsDefinition("http://yourlibrary.com/", "xxx.xxx.Views.")]
[assembly: XmlnsDefinition("http://yourlibrary.com/", "xxx.xxx.Views.SomeNestedView")]

这减轻了 XAML 的负担:

xmlns:viewsAndNestedViews="http://yourlibrary.com/"

我见过有人用 XML 实体来做这种事情

xmlns:x="&stem;/some.uri"

虽然这是完全合法的,但如果我发现我想与之合作的 XML 发生这种情况,我会感到非常震惊。主要是因为它暗示命名空间可能会在某个时候发生变化,并且编写一个应用程序来处理 XML 当命名空间可能发生变化时只会让事情变得更加困难。