我需要检查转换器参数是否属于 System.Windows.Visibility 类型:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//....
if (parameter is Visibility)
{
Console.WriteLine("parameter is Visibility");
}
if (parameter is Enum)
{
Console.WriteLine("parameter is Enum");
}
if (parameter.GetType().IsEnum)
{
Console.WriteLine("parameter.GetType().IsEnum");
}
//.......
}
三个 if 条件都不评估为 true,在其他 SO 问题中推荐的第二个和第三个测试方法。调试器指示参数为
System.Windows.Visibility.Collapsed
,所以没有问题。
我忽略了哪个可能显而易见的事实?
默认情况下,输入 ConverterParameter 的文本被视为字符串,除非使用
StaticResource
引入对象实例
如果您在 XAML 中将参数提供为
{x:Static Visibility.Collapsed}
,则第一个 if
条件的计算结果为 true
:
<button
Visibility="{Binding Path=IsCompany,
Converter={cnv:VisibilityConverter},
ConverterParameter={x:Static Visibility.Collapsed},
FallbackValue={x:Static Visibility.Collapsed}}"
/>