【问题标题】:How do I use ConverterParameter in C++/Cx?如何在 C++/Cx 中使用 ConverterParameter?
【发布时间】:2012-10-30 07:04:03
【问题描述】:

我在 Visual Studio 中启动了一个新的 Visual C++ 项目,作为模板的一部分,我得到了一个 BooleanToVisibilityConverter。这工作正常,但指定时似乎不支持 ConverterParameter=Invert。

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}" />

C++:

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^ parameter 变量做一些事情,但是什么?为什么内置的项目模板不能处理这种情况?

【问题讨论】:

    标签: visual-c++ windows-runtime converter ivalueconverter c++-cx


    【解决方案1】:

    转换器参数是一个可选的附加参数,XAML 使用者将传递给转换器以指定转换的特定于上下文的详细信息。

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

    这篇博文有更多信息;它是关于 WPF 但概念是相同的:http://zamjad.wordpress.com/2010/01/08/passing-parameters-to-value-converter/

    【讨论】:

    • 那么当我创建诸如Visibility={Binding someBool, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParam=Invert} 之类的绑定时,“Invert”只是作为字符串传递?我以为这是特别的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2020-05-11
    • 2015-12-18
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2012-05-28
    相关资源
    最近更新 更多