我是WPF的初学者,有些事情我似乎无法理解。
我有一个 CheckBox
,当没有选择 RadioButton
时,我想要禁用它。
我的当前语法是:
<CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox>
基本上,我希望IsEnabled的值与我当前提供的绑定表达式相反。我该怎么做?谢谢。
我是WPF的初学者,有些事情我似乎无法理解。
我有一个 CheckBox
,当没有选择 RadioButton
时,我想要禁用它。
我的当前语法是:
<CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox>
您需要使用所谓的值转换器(实现了IValueConverter接口的类),下面是这样一个类的基本示例。(注意截断...)
public class NegateConverter : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
{
if ( value is bool ) {
return !(bool)value;
}
return value;
}
public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
{
if ( value is bool ) {
return !(bool)value;
}
return value;
}
}
然后在您的XAML中包含它,您需要执行以下操作:
<UserControl xmlns:local="clr-namespace:MyNamespace">
<UserControl.Resources>
<local:NegateConverter x:Key="negate" />
</UserControl.Resources>
...
<CheckBox IsEnabled="{Binding IsChecked, ElementName=rbBoth, Converter={StaticResource negate}}"
Content="Show all" />
</UserControl>
<CheckBox>
<CheckBox.Style>
<Style TargetType="CheckBox">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsShowName }" Value="true">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>
这个怎么样:
创建一个布尔值转换器:
class BooleanValueInverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(parameter is IValueConverter))
{
if (value is bool)
return !(bool)value;
else
return DependencyProperty.UnsetValue;
}
else
{
IValueConverter converter = (IValueConverter)parameter;
if (value is bool)
{
bool input = !(bool)value;
return converter.Convert(input, targetType, null, culture);
}
else
{
return DependencyProperty.UnsetValue;
}
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在 XAML 中导入实现 Inverter 类的命名空间:
xmlns:util="clr-namespace:MyApp.Utilities"
<util:BooleanValueInverter x:Key="Inverter" />
然后就可以像这样简单地使用它:
<TextBox Text="{Binding Path=TextProperty}" IsEnabled="{Binding SomeBoolPropertyToInvert, Converter={StaticResource Inverter}}"/>
return (value 是 bool 类型) ? !(bool)value : value;
- Amsakanna