【问题标题】:Clr namespace mapping to default xaml namespacesClr 命名空间映射到默认的 xaml 命名空间
【发布时间】:2012-05-11 11:01:51
【问题描述】:

我有点厌倦了必须在每个 xaml 文件中声明一个 xmlns 并且不得不为我的自定义控件使用前缀。是否可以将 clr 命名空间映射到“http://schemas.microsoft.com/winfx/2006/xaml/presentation”?

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

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

但这似乎不起作用。我仍然收到如下编译错误:

XML 命名空间“http://schemas.microsoft.com/winfx/2006/xaml/presentation”中不存在标记“MyCustomControl”。

注意:我的控件在同一个程序集中(我有一个程序集)。

【问题讨论】:

    标签: c# .net wpf xaml


    【解决方案1】:
    1. 很遗憾,如果控件是在同一个程序集中定义的,则不能使用映射到由 XmlnsDefinition 定义的 Xaml 命名空间的控件。不同的组件虽然工作正常。为此,您必须使用 clr-namespace 定义。

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

    【讨论】:

    • 好吧,如果我必须在每个引用我的类的变量前面加上“local:”,并且不能这么简单地添加 using(感谢 VS resolve->add using ...),那么我也会问你如何将我的类包含在 System 命名空间中:)
    • @ErenErsönmez 好的,Xaml 肯定不像 C# 编辑器那样用户友好 :) 使用比 local: 更短的前缀不是一个选项吗?我知道我在某些时候一直在这样做并使用l: 代替,因为那个长前缀看起来很难看。
    • 是的,l: 肯定比local: 更方便。我可能会用那个。谢谢。
    • 我同意 #2 作为最佳实践,但根据您的感受,如果您这样做,您不必在控件上使用任何 xmlns 声明。个人意见,但只是让从哪个命名空间控件被引用变得透明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2018-12-20
    • 1970-01-01
    相关资源
    最近更新 更多