我想将ComboBox的IsEnabled属性绑定到复选框的IsChecked属性,而我希望只有在复选框值为FALSE时才能使用ComboBox。如何将属性绑定为false值
IsEnabled="{Binding ElementName=RegexCbx, Path=IsChecked}"
这样做的最简单方法是什么?
我想将ComboBox的IsEnabled属性绑定到复选框的IsChecked属性,而我希望只有在复选框值为FALSE时才能使用ComboBox。如何将属性绑定为false值
IsEnabled="{Binding ElementName=RegexCbx, Path=IsChecked}"
这样做的最简单方法是什么?
使用样式触发:
<StackPanel>
<CheckBox x:Name="Foo" Content="Click me"/>
<ComboBox>
<ComboBox.Style>
<Style TargetType="{x:Type ComboBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=Foo}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.Style>
</ComboBox>
</StackPanel>
从的IValueConverter衍生应该做的伎俩类:
public class BoolToOppositeBoolConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (targetType != typeof(bool))
throw new InvalidOperationException("The target must be a boolean");
return !(bool)value;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
最好是在资源字典,创建转换器的实例:
<converters:BoolToOppositeBoolConverter x:Key="oppositeBoolConverter" />
然后在你的视图中,做这样的事情,其中IsChecked的bool值被转换为t o相反的价值。不要忘记包含资源字典作为视图的资源。
<TextBox IsEnabled="{Binding IsChecked, Converter={StaticResource oppositeBoolConverter}" />
另一种方式来做到这一点,就是用混合的DataTrigger
:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions"
<ComboBox>
<i:Interaction.Triggers>
<ie:DataTrigger Binding="{Binding IsChecked, ElementName=RegexCbx}"
Value="False">
<ie:ChangePropertyAction PropertyName="IsEnabled"
TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}}"
Value="True"/>
</ie:DataTrigger>
<ie:DataTrigger Binding="{Binding IsChecked, ElementName=RegexCbx}"
Value="True">
<ie:ChangePropertyAction PropertyName="IsEnabled"
TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}}"
Value="False"/>
</ie:DataTrigger>
</i:Interaction.Triggers>
</ComboBox>
好,最简单的方法是'DataTrigger'和更好的方式是'ValueConverter' – Gopichandar
只需使用一个转换器 – blindmeis