我在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
变量做些什么,但是什么?为什么内置项目模板不处理这种情况呢?
答案 0 :(得分:1)
转换器参数是一个可选的附加参数,XAML使用者将传递给转换器以指定转换的特定于上下文的详细信息。
作为转换器的作者,您可以自行决定该参数的工作原理(并使用参数为其实现逻辑)。基本上,您需要将Object^
参数转换为String^
,然后将其与“反转”进行比较(然后将转换函数的行为更改为相应的行为)。
此博文有更多信息;它是关于WPF的,但概念是相同的:http://zamjad.wordpress.com/2010/01/08/passing-parameters-to-value-converter/