Clr命名空间映射到默认的XAML命名空间

7

我有点厌烦每个XAML文件都必须声明一个XML命名空间,并且必须为我的自定义控件使用前缀。是否可以将clr命名空间映射到"http://schemas.microsoft.com/winfx/2006/xaml/presentation"?

我在我的AssemblyInfo.cs中尝试了以下内容:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation","MyOwnNamespace")]

但这似乎不起作用。我仍然会收到编译错误,如下所示:
“标签'MyCustomControl'在XML命名空间'http://schemas.microsoft.com/winfx/2006/xaml/presentation'中不存在。”
注意:我的控件在同一个程序集中(我只有一个程序集)。
1个回答

9
  1. 很不幸,如果控件在同一程序集中定义,您将无法使用映射到由XmlnsDefinition定义的Xaml命名空间的控件。但是,不同程序集可以正常工作。对于此情况,您必须使用clr-namespace定义。

  2. 为什么要将您的控件添加到Xaml默认命名空间中?不要这样做。 这就像为您的类使用System命名空间,因为您不想为它们的命名空间添加using指令。


4
如果我必须在引用我的类的每个变量前面加上 "local:",并且不能像使用VS解析->添加using那样简单地添加它们,那么我也会问你如何将我的类包含在System命名空间中 :) - Eren Ersönmez
@ErenErsönmez 好的,Xaml 显然不像 C# 编辑器那样用户友好 :) 使用比 local: 更短的前缀不是一个选项吗?我知道我曾经在某个时候这样做过,并使用了 l: 代替,因为那个长前缀看起来很丑。 - Botz3000
是的,l:肯定比local:更方便。我可能会使用它。谢谢。 - Eren Ersönmez
我同意第二点作为最佳实践,但取决于你的感觉,如果这样做,你不必在控件上使用任何xmlns声明。这是个人意见,但它使得从哪个命名空间引用控件更加透明。 - Kcvin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接