看起来奇怪的是,绑定无法在默认情况下将布尔值转换为可见性,而无需每次都提供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。
答案 0 :(得分:1)
有三种可能的可见性:
Visible
Hidden
Collapsed
如何将具有两种状态的东西转换为具有三种状态的东西?
答案 1 :(得分:1)
因为boolean和visiblitiy在后面没有相同的类型。 并且有2个状态不可见 - > “隐藏”和“崩溃”。根据WPF应该决定你想要什么?
答案 2 :(得分:0)
这纯粹是信息性的,但它不必使用转换器
<Button x:Name="TestButton" Content="Test" Width="110" Height="26">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsEnabled}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<CheckBox IsChecked="{Binding ElementName=TestButton, Path=IsEnabled}" Width="110" Height="23" Content="Check me" Margin="280,108,49,104" />