【问题标题】:Why can't a Boolean be converted to Visibility in a Binding without having to supply a BooleanToVisibilityConverter?为什么不提供 BooleanToVisibilityConverter 就不能在绑定中将布尔值转换为可见性?
【发布时间】:2012-04-01 04:33:13
【问题描述】:

默认情况下绑定不能将布尔值转换为可见性,而不必每次都提供 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 很好,在这里学到了一些有用的东西。

标签: wpf user-interface boolean visibility


【解决方案1】:

存在三种可能的可见性:

  1. Visible
  2. Hidden
  3. Collapsed

如何将具有两种状态的事物转换为具有三种状态的事物?

【讨论】:

  • 安德烈亚斯......你应该已经看到了这一点 :o) 除非你真的在谈论 Silverlight。
  • 我确实做到了。但我的意思是,期望的行为是 100 次中的 99 次,您希望 true 可见并且 false 被折叠。为什么不将其作为默认设置,让开发人员在需要时提供转换器?
【解决方案2】:

因为 boolean 和 visiblitiy 在后面没有相同的类型。 并且有 2 个不可见的状态 ->“隐藏”和“折叠”。 WPF 应该根据什么来决定你想要什么?

【讨论】:

  • 它可以将双精度数转换为字符串,即使有很多方法可以将双精度数转换为字符串...
猜你喜欢
  • 2012-05-04
  • 2011-03-26
  • 1970-01-01
  • 2016-11-29
  • 2016-06-16
  • 2013-04-01
  • 2016-06-11
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多