您可以通过使用通用的IValueConverter 实现而不是反转来实现相同的目标,该实现可以将布尔值转换为可配置 目标值以表示真假。下面是一个这样的实现:
public class BooleanConverter<T> : IValueConverter
{
public BooleanConverter(T trueValue, T falseValue)
{
True = trueValue;
False = falseValue;
}
public T True { get; set; }
public T False { get; set; }
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is bool && ((bool) value) ? True : False;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is T && EqualityComparer<T>.Default.Equals((T) value, True);
}
}
接下来,在T 是Visibility 的地方对其进行子类化:
public sealed class BooleanToVisibilityConverter : BooleanConverter<Visibility>
{
public BooleanToVisibilityConverter() :
base(Visibility.Visible, Visibility.Collapsed) {}
}
最后,您可以在 XAML 中使用上面的 BooleanToVisibilityConverter 并将其配置为,例如,使用 Collapsed 表示 true,使用 Visible 表示 false:
<Application.Resources>
<app:BooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
True="Collapsed"
False="Visible" />
</Application.Resources>
当您想要绑定到名为 IsHidden 而不是 IsVisible 的布尔属性时,此反转非常有用。