Visual c++ 如何在C++/Cx? 我在VisualStudio中启动了一个新的VisualC++项目,作为模板的一部分,我得到了一个BooLotoTVIVIILITIVITE转换器。这很好,但在指定时,它似乎不支持ConverterParameter=Invert

Visual c++ 如何在C++/Cx? 我在VisualStudio中启动了一个新的VisualC++项目,作为模板的一部分,我得到了一个BooLotoTVIVIILITIVITE转换器。这很好,但在指定时,它似乎不支持ConverterParameter=Invert,visual-c++,windows-runtime,converter,ivalueconverter,c++-cx,Visual C++,Windows Runtime,Converter,Ivalueconverter,C++ Cx,XAML: <UserControl.Resources> <local:IntToVisibilityConverter x:Name="IntToVisibilityConverter" /> <common:BooleanToVisibilityConverter x:Name="BoolToVisibilityConverter" /> </UserControl.Resources> ... <Image Wid

XAML:

<UserControl.Resources>
    <local:IntToVisibilityConverter x:Name="IntToVisibilityConverter" />
    <common:BooleanToVisibilityConverter x:Name="BoolToVisibilityConverter" />
</UserControl.Resources>

...

<Image Width="24" Height="24" Source="/Assets/DisclosureTriangleDown.png" Visibility="{Binding Disclosed, Converter={StaticResource BoolToVisibilityConverter}}" />
<Image Width="24" Height="24" Source="/Assets/DisclosureTriangleRight.png" Visibility="{Binding Disclosed, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=Invert}" />
Object^ BooleanToVisibilityConverter::Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language)
{
    (void) targetType;  // Unused parameter
    (void) parameter;   // Unused parameter
    (void) language;    // Unused parameter

    auto boxedBool = dynamic_cast<Box<bool>^>(value);
    auto boolValue = (boxedBool != nullptr && boxedBool->Value);
    return (boolValue ? Visibility::Visible : Visibility::Collapsed);
}

Object^ BooleanToVisibilityConverter::ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language)
{
    (void) targetType;  // Unused parameter
    (void) parameter;   // Unused parameter
    (void) language;    // Unused parameter

    auto visibility = dynamic_cast<Box<Visibility>^>(value);
    return (visibility != nullptr && visibility->Value == Visibility::Visible);
}

...
C++:

<UserControl.Resources>
    <local:IntToVisibilityConverter x:Name="IntToVisibilityConverter" />
    <common:BooleanToVisibilityConverter x:Name="BoolToVisibilityConverter" />
</UserControl.Resources>

...

<Image Width="24" Height="24" Source="/Assets/DisclosureTriangleDown.png" Visibility="{Binding Disclosed, Converter={StaticResource BoolToVisibilityConverter}}" />
<Image Width="24" Height="24" Source="/Assets/DisclosureTriangleRight.png" Visibility="{Binding Disclosed, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=Invert}" />
Object^ BooleanToVisibilityConverter::Convert(Object^ value, TypeName targetType, Object^ parameter, String^ language)
{
    (void) targetType;  // Unused parameter
    (void) parameter;   // Unused parameter
    (void) language;    // Unused parameter

    auto boxedBool = dynamic_cast<Box<bool>^>(value);
    auto boolValue = (boxedBool != nullptr && boxedBool->Value);
    return (boolValue ? Visibility::Visible : Visibility::Collapsed);
}

Object^ BooleanToVisibilityConverter::ConvertBack(Object^ value, TypeName targetType, Object^ parameter, String^ language)
{
    (void) targetType;  // Unused parameter
    (void) parameter;   // Unused parameter
    (void) language;    // Unused parameter

    auto visibility = dynamic_cast<Box<Visibility>^>(value);
    return (visibility != nullptr && visibility->Value == Visibility::Visible);
}
Object^BooleanToVisibilityConverter::Convert(Object^值、TypeName targetType、Object^参数、String^语言)
{
(void)targetType;//未使用的参数
(void)参数;//未使用的参数
(void)language;//未使用的参数
auto-boxedBool=动态\u转换(值);
自动布尔值=(boxedBool!=nullptr&&boxedBool->Value);
返回(布尔值?可见性::可见:可见性::折叠);
}
对象^BooleanToVisibilityConverter::ConvertBack(对象^value,类型名称targetType,对象^parameter,字符串^language)
{
(void)targetType;//未使用的参数
(void)参数;//未使用的参数
(void)language;//未使用的参数
自动可见性=动态投影(值);
返回(可见性!=nullptr&&visibility->Value==visibility::Visible);
}

我假设我需要对
对象^parameter
变量执行一些操作,但是什么呢?为什么内置项目模板不能处理这种情况?

转换器参数是XAML使用者传递给转换器的可选附加参数,用于指定转换的上下文特定细节

作为转换器的作者,您可以指定该参数的具体工作方式(并使用该参数实现其逻辑)。基本上,您需要将
Object^
参数强制转换为
String^
,然后将其与“Invert”进行比较(然后更改Convert函数的行为以相应地进行操作)


这篇博文有更多的信息;这是关于WPF的,但概念是相同的:

所以当我创建一个绑定,比如
可见性={binding someBool,Converter={StaticResource BooleanToVisibilityConverter},ConverterParam=Invert}
时,“Invert”仅仅作为字符串传递?我以为这是一件特别的事。