为什么在绑定时无法将布尔值转换为可见性而不提供BooleanToVisibilityConverter?

3

默认情况下,绑定器不能将布尔值转换为可见性,而不必每次都提供BooleanToVisibilityConverter。有人知道为什么吗?

更新

我现在已经找到了一种方法:

创建一个如下的TypeConverter:

public class VisibilityFromBooleanConverter : TypeConverter
{
  public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
  {
    if (sourceType == typeof(Boolean)) return true;
    return base.CanConvertFrom(context, sourceType);
  }

  public override object ConvertFrom(ITypeDescriptorContext context,
    System.Globalization.CultureInfo culture, object value)
  {
    if (value is Boolean) return ((Boolean)value) ? Visibility.Visible :
      Visibility.Collapsed;
    return base.ConvertFrom(context, culture, value);
  }

将以下内容添加到您的应用程序中:

TypeDescriptor.AddAttributes(typeof(Visibility),
  new TypeConverterAttribute(typeof(VisibilityFromBooleanConverter)));

看起来它完全正常运行。现在,您不必为每个布尔绑定提供一个BooleanToVisibilityConverter。


+1 很好,从这里学到了有用的东西。 - Silvermind
2个回答

1

有三种可能的可见性:

  1. Visible(可见)
  2. Hidden(隐藏)
  3. Collapsed(折叠)

如何将具有两个状态的东西转换为具有三个状态的东西?


安德烈斯...你应该早就看到这一点了 :o) 除非你真的在谈论Silverlight。 - NestorArturo
我有点这么做了。但我的意思是,99次中有99次你想要true可见,false被折叠。为什么不将其作为默认值,并让开发人员提供转换器(converter),如果他/她需要的话呢? - Andreas Zita

1
因为布尔值和可见性在后台中不具有相同的类型。而且有两种状态是不可见的——“隐藏”和“折叠”。根据什么,WPF 应该决定你想要什么?

它可以将双精度浮点数转换为字符串,即使有许多将双精度浮点数转换为字符串的方法... - Andreas Zita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接