我想根据另一个ComboBox中是否选择了一个项来启用/禁用ComboBox.我能够通过在Style上设置触发器来使其工作,但这会覆盖我对组合框的自定义全局样式.有没有另一种方法来获得相同的功能而不会失去我的风格?
<ComboBox Grid.Column="1" Grid.Row="1" Name="AnalysisComboBox" MinWidth="200" VerticalAlignment="Center" HorizontalAlignment="Left" ItemsSource="{Binding Path=AvailableAnalysis}"> <ComboBox.Style> <Style TargetType="{x:Type ComboBox}"> <Setter Property="IsEnabled" Value="True" /> <Style.Triggers> <DataTrigger Binding="{Binding SelectedItem,ElementName=ApplicationComboBox}" Value="{x:Null}"> <Setter Property="IsEnabled" Value="False" /> </DataTrigger> </Style.Triggers> </Style> </ComboBox.Style> </ComboBox>
解决方法
您不需要通过Style执行此操作,您可以使用值转换器直接绑定IsEnabled属性,如下所示:
<ComboBox Grid.Column="1" Grid.Row="1" Name="AnalysisComboBox" MinWidth="200" VerticalAlignment="Center" HorizontalAlignment="Left" IsEnabled={Binding SelectedItem,ElementName=ApplicationComboBox,Converter={StaticResource NullToFalseConverter}}" ItemsSource="{Binding Path=AvailableAnalysis}"/>
其中NullToFalseConverter是以下转换器实例的键:
public class NullToFalseConverter: IValueConverter { public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture) { return value == null; } public object ConvertBack(object value,System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }