在生成的XAML代码中消除名称空间的歧义

时间:2014-07-08 03:15:18

标签: xaml c++-cx

我有一个Page从这样的库中导入控件:

<Page
    x:Class="Foo.Bar.SomePage"
    xmlns:myNamespace="using:Bar.Controls">

    <myNamespace:SomeControl x:Name="someControl">
        <!-- snip -->
   </myNamespace:SomeControl> 
</Page>

正如您在此处所见,页面在::Foo::Bar命名空间中声明,而SomeControl::Bar命名空间中声明。我面临的问题是Visual Studio生成此代码:

namespace Bar {
    namespace Controls {
        ref class SomeControl;
    }
}

namespace Foo
{
    namespace Bar
    {
        partial ref class SomePage : /* ... */
        {
            /* ... */
            private: Bar::SomeControl^ someControl;
        };
    }
}

字段定义Bar::SomeControl^ someControl尝试选择::Foo::Bar::SomeControl而不是::Bar::SomeControl,因为Visual Studio没有完全限定它。

这是设计(有没有办法用using: URI来表示它将完全限定名称),或者这是一个错误?我该如何解决这个问题?

我认为我可以说服人们对这个特定类的命名空间结构做一个例外,但是如果有一个代码内的解决方案就会更简单。

1 个答案:

答案 0 :(得分:0)

对于后人,现在我在使用#include g.h文件之前使用这个kludge,但它并不是非常漂亮:

namespace Foo
{
    namespace Bar
    {
        typedef ::Bar::SomeControl SomeControl;
    }
}

它将控件引入(不正确的)命名空间,以便即使XAML代码生成器出错也能正常工作。