我正在尝试添加自定义转换器(布尔值到可见性)。转换器的代码很好。它似乎映射好了。但是,当我尝试将其添加为用户控件的资源时,我得到一个无效标记,其中显示“找不到BooleanToVisibilityConverter。验证您没有错过程序集,并且已经构建了所有引用的程序集”。即使有这个无效标记显示项目编译并运行没有错误或崩溃。
我在Windows 8.1上使用Visual Studio 2013
转换器.h文件:
#pragma once
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Interop;
namespace BooleanConverter{
public ref class BooleanToVisibilityConverter sealed : IValueConverter
{
public:
virtual Platform::Object^ Convert(
Platform::Object^ value,
Windows::UI::Xaml::Interop::TypeName targetType,
Platform::Object^ parameter,
Platform::String^ language);
virtual Platform::Object^ ConvertBack(
Platform::Object^ value,
Windows::UI::Xaml::Interop::TypeName targetType,
Platform::Object^ parameter,
Platform::String^ language);
};
}
转换器.cpp文件:
#include "pch.h"
#include "BooleanToVisibilityConverter.h"
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Interop;
using namespace Windows::UI::Xaml::Data;
Object^ BooleanConverter::BooleanToVisibilityConverter::Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language)
{
auto boxedBool = dynamic_cast<Box<bool>^>(value);
auto boolValue = (boxedBool != nullptr && boxedBool->Value);
return (boolValue ? Visibility::Visible : Visibility::Collapsed);
}
Object^ BooleanConverter::BooleanToVisibilityConverter::ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language)
{
throw ref new Platform::NotImplementedException();
}
xaml代码:
<UserControl
x:Class="SimpleShop.JobItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:SimpleShop"
xmlns:converters="using:BooleanConverter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" Width="1030" Height="Auto" Background="Black">
<UserControl.Resources>
<ResourceDictionary>
<converters:BooleanToVisibilityConverter x:Key="BooleanToCollapesdConverter"/>
</ResourceDictionary>
</UserControl.Resources>
我尝试将xmlns语句更改为: 的xmlns:转换器= “CLR-名称空间:BooleanConverter”
但是这会引发错误,说无法找到BooleanConverter名称空间
真正奇怪的部分是,如果我删除xmlns语句并重新输入,intellisense表示无法找到命名空间。但是,如果我只是简单地将该行复制并粘贴到其自身上,那么xmlns语句中的错误就会消失。
如何摆脱这个无效的标记,因为它编译并运行,它似乎完全没有效果。或者我错过了实现这个转换器的东西?我使用MSDN作为参考(http://msdn.microsoft.com/en-us/library/ms747086(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1),对我来说,看起来我没有实现这个错误。
如果我需要提供更多代码,请告诉我,但我相信这是相关的一切。
答案 0 :(得分:1)
WinRT命名空间查找规则要求winmd发布的所有命名空间都位于具有相同名称(或根命名空间名称)的winmd中。也就是说,一个名为&#34; MyNamespace.MySubNamespace.MyClass&#34;必须存在于MyNamespace.winmd或MyNamespace.MySubNamespace.winmd中,否则所有类型的加载器都无法可靠地找到它。
我认为您的问题是您的命名空间是:: Converters,但您的布尔转换器类可能隐藏在SimpleShop.winmd中。我会尝试将名称空间(和引用)更改为SimpleShop :: Converters,看看这是否可以解决您的问题。