我在一个示例中尝试this,它似乎工作正常。然后我将它应用到我们正在处理的主项目中,但它失败了。这是相关的代码片段:
<ComboBox Name="Combo" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Tables}" SelectedItem="{Binding TableName, Mode=TwoWay}"
Style="{StaticResource ComboBoxStyle}" Grid.Row="1" Height="30" Width="180"
SelectionChanged="Combo_SelectionChanged" IsEnabled="{Binding IsChecked, ElementName=rdBtnList}" Margin="6,20,6,0" Grid.RowSpan="2" />
和控制它的单选按钮:
<RadioButton Content="By List" Height="16" IsChecked="{Binding Path=ListSelect, Mode=TwoWay}"
HorizontalAlignment="Right" Margin="0,6,24,0" Name="rdBtnList" VerticalAlignment="Top"
Background="DodgerBlue" FontSize="13" FontWeight="Bold" Grid.RowSpan="2" />
有人看到任何看似不正确的东西(关于IsEnabled情况)吗?
答案 0 :(得分:1)
现在,编写代码的方式,选择单选按钮时组合框已启用。如果你想要相反的情况发生,当选择单选按钮时,应该禁用组合框,你需要一个转换器来使布尔值相反。
public class OppositeBoolConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return !System.Convert.ToBoolean(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return value;
}
}
}
现在,添加命名空间引用并将转换器添加到组合框的绑定中:
xmlns:local="clr-namespace:NAMESPACE"
<local:OppositeBoolConverter x:Key="cnt" />
IsEnabled="{Binding IsChecked, Converter={StaticResource cnt}, ElementName=rdBtnList}"