在XAML中,可以使用xmlns
指令导入自定义命名空间:
xmlns:custom="clr-namespace:GreatStuff"
在C#中,可以使用
导入该命名空间using GreatStuff;
此外,可以按如下方式对基于全局(根)命名空间的命名空间进行评估:
using global::GreatStuff;
如何根据XAML中的全局命名空间强制执行评估?
背景
我正面临着(明显有点模糊)的情况,即存在这样一个名称空间global::GreatStuff
,其中包含一个名为... GreatStuff
的WPF控件类(即完全合格的,即' s C#中的global::GreatStuff.GreatStuff
。在同一名称空间中,我想在WPF窗口中使用该控件。
有趣的是,在这个星座中,我不能在窗口的XAML文件中对Name
类型的任何控件使用x:Name
/ global::GreatStuff.GreatStuff
属性:
类型名称' GreatStuff'类型' GreatStuff.GreatStuff'中不存在。 (CS0426)
请注意,如果我没有指定Name
/ x:Name
属性,则完全相同的文件编译好!
现在,为什么编译器会假设通过设置Name
/ x:Name
属性,我尝试访问名为GreatStuff.GreatStuff.GreatStuff
的内容?
通过检查从窗口XAML文件生成的.g.cs
文件,可以找到答案。在该文件中,XAML代码段
<custom:GreatStuff x:Name="stuff"/>
被编译为以下C#片段:
internal GreatStuff.GreatStuff stuff;
即,使用完全限定名称,但没有显式全局名称空间标记。
当然,作为名称空间global::GreatStuff
中类的字段,所有这些都包含在
namespace GreatStuff {
所以,可怜的C#编译器不禁假设stuff
应该属于global::GreatStuff.GreatStuff.GreatStuff
类型。如果在
xmlns:custom="clr-namespace:GreatStuff"
我可以强制执行该命名空间前缀的任何提及都可以在强制执行全局命名空间时进行转换。
由于此问题以外的原因,此处无法更改命名空间和/或类名称。
答案 0 :(得分:0)
只有在满足以下所有条件时才会出现此问题:
如果您无法修改任何内容以使其中任何一个条件错误,那么您正在处理一些非常严格的限制。
据我所知,这是xaml编译器的限制,您需要联系Microsoft以解决它。我能想到的唯一另一件事就是尝试使用构建xaml的自定义构建过程来解决它,允许您编辑生成的文件,然后构建代码。这需要一些研究来确定如何设置。