我正在尝试在我的XAML设计中制作一些宽度,这取决于其他宽度。为了实现这一点,我发现我需要使用IValueConverter
来实现绑定。几乎归结为this question的方法(或者,更详细的帖子,click here)。
我的代码相当简单,但它不断产生以下错误:error C2039: 'GridViewWidthConverter': is not a member of 'MyNamespace'
。为什么呢?
现在,我的XAML代码的相关部分如下所示:
<Page
...
xmlns:local="using:MyNamespace"
...>
<!-- Horizontal scrolling grid -->
<GridView>
<GridView.Resources>
<local:GridViewWidthConverter x:Key="GridViewWidthConverter" />
</GridView.Resources>
...
</GridView>
...
</Page>
GridViewWidthConverter.h
:
#pragma once
#include "pch.h"
using namespace Platform;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Interop;
namespace MyNamespace
{
public ref class GridViewWidthConverter sealed : IValueConverter
{
public:
GridViewWidthConverter();
virtual ~GridViewWidthConverter();
virtual Object^ Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language);
virtual Object^ ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language);
};
}
GridViewWidthConverter.cpp
:
#include "pch.h"
#include "GridViewWidthConverter.h"
using namespace MyNamespace;
// Constructor
GridViewWidthConverter::GridViewWidthConverter(){}
// Destructor
GridViewWidthConverter::~GridViewWidthConverter(){}
Object ^ GridViewWidthConverter::Convert(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
{
return value;
}
Object ^ GridViewWidthConverter::ConvertBack(Object ^ value, TypeName targetType, Object ^ parameter, String ^ language)
{
return value;
}
完整的错误规范如下:
Error C2039: 'GridViewWidthConverter': is not a member of 'MyNamespace'
中的 \generated files\xamltypeinfo.g.cpp, line 200
Error C2065: 'GridViewWidthConverter': undeclared identifier
\generated files\xamltypeinfo.g.cpp, line 200
Error C2440: 'initializing': cannot convert from 'overloaded-function' to 'Platform::Object ^(__cdecl *)(void)'
\generated files\xamltypeinfo.g.cpp, line 252
非常感谢!
答案 0 :(得分:1)
在标头命名空间名称中声明为namespace MyNamespace;
但在cpp文件中它是using namespace MyNameSpace;
(注意案例差异)。 C ++和C ++ / Cx都是区分大小写的语言,因此MyNamespace
和MyNameSpace
是两个不同的标识符。
此外,您的标头包含预编译标头,并具有全局using
指令。
答案 1 :(得分:1)
对于仍在苦苦挣扎的人:
XamlTypeInfo.g.cpp是一个生成的文件,其中包括:每个XAML页面的pch.h,App.xaml.h,App.g.hpp和* .xaml.h以及* .g.hpp头文件在你的应用程序中生成该文件,以便它知道应用程序中的所有可绑定类型,以便只要XAML解析器遇到它们就可以实例化它们。
如果您的转换器类型不是以某种方式包含在其中一个头文件中,那么您将收到此错误。如果#include你的头文件在预编译的头文件,App.xaml.h头文件,或其他* .xaml.h头文件之一,那么它应该清理。 (生成.g.hpp文件,因此您对它们所做的任何更改都将无法生存。)最好只在#chlude头文件中包含它,因为这样的类型将在所有CPP文件中被识别和访问。将避免编译PCH本身的任何问题。
来源:link
答案 2 :(得分:0)
我花了一段时间,但我解决了我的问题,因此删除导致错误的XAML代码,构建项目,重建项目,重新添加代码并开始新的构建或调试会话。 Stack Overflow上有很多这样的“解决方案”,然而,这个问题的真正原因对我来说还不清楚。