0

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

4

1 回答 1

1

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

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

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

于 2012-10-30T18:01:11.677 回答