WPF BooleanToVisibilityConverter转换为隐藏,而不是折叠时为false?

有没有办法使用现有的WPF BooleanToVisibilityConverter转换器,但将False值转换为隐藏,而不是默认的折叠,或者我应该写我自己的? 我正在一个项目中,这样做很简单(共享的东西进入一个单独的解决scheme,并且重build/签入/合并过程是一个过程的一个杂草丛生的庞然大物),所以我宁愿如果我只能传递一个参数给现有的参数,而不是跳过刚刚提到的箍。

不幸的是,它只能转换为可见或折叠,所以你必须自己写。 这里是根据Reflector的Convert方法:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = false; if (value is bool) { flag = (bool)value; } else if (value is bool?) { bool? nullable = (bool?)value; flag = nullable.HasValue ? nullable.Value : false; } return (flag ? Visibility.Visible : Visibility.Collapsed); } 

我发现最简单和最好的解决scheme是这样的:

 [ValueConversion(typeof(bool), typeof(Visibility))] public sealed class BoolToVisibilityConverter : IValueConverter { public Visibility TrueValue { get; set; } public Visibility FalseValue { get; set; } public BoolToVisibilityConverter() { // set defaults TrueValue = Visibility.Visible; FalseValue = Visibility.Collapsed; } public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (!(value is bool)) return null; return (bool)value ? TrueValue : FalseValue; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (Equals(value, TrueValue)) return true; if (Equals(value, FalseValue)) return false; return null; } } 

当使用它时,只需configuration一个版本,就像这样在XAML中完全实现你所需要的版本:

 <Blah.Resources> <local:BoolToVisibilityConverter x:Key="BoolToHiddenConverter" TrueValue="Visible" FalseValue="Hidden" /> </Blah.Resources> 

然后在一个或多个绑定中使用它:

 <Foo Visibility="{Binding IsItFridayAlready, Converter={StaticResource BoolToHiddenConverter}}" /> 

这个简单的解决scheme解决隐藏/折叠的偏好以及扭转/否定效果。

SILVERLIGHT用户必须删除[ValueConversion]声明,因为该属性不是Silverlight框架的一部分。 在WPF中也不是严格需要的,但是与内置的转换器是一致的。

你不能只使用风格而不是转换器? 代码会是这样的:

 <Style x:Key="Triggers" TargetType="Button"> <Style.Triggers> <Trigger Property="{Binding ...}" Value="false"> <Setter Property = "Visibility" Value="Hidden"/> </Trigger> </Style.Triggers> </Style> 

你需要提供绑定自己的属性来指向你的布尔属性。

我喜欢使用该参数来反转可视性逻辑:要反转逻辑,只需将ConverterParameter = Reverse放入您的xaml代码

 public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { bool flag = false; if (value is bool) { flag = (bool)value; } var reverse = parameter as string; if(reverse != null && reverse == "Reverse") flag != flag; return (flag ? Visibility.Visible : Visibility.Collapsed); } 

我写了BoolToVisibilityConverte,你可以在Parameter中传递不可见状态:

  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var boolValue = (bool) value; return boolValue ? Visibility.Visible : (parameter ?? Visibility.Hidden); } 

所以你可以像这样绑定:

 Visibility="{Binding SomeBool, Converter={StaticResource ResourceKey=BooleanToVisibilityConverter}, ConverterParameter={x:Static Visibility.Collapsed}}" 

希望这可以帮助 :)