我正在考虑让 WPFComboBox
显示为空白的不同方法,就好像在IsEnabled
设置为 false 时没有选择任何内容一样。像往常一样,我试图做到这一点,而不必重新定义整个控件模板,ComboBox
这一直是我与 WPF 的斗争。如果有人有比重新定义整个ComboBox
控件模板更优雅的解决方案,请告诉我。
我要做的事情的原因是我有一个CheckBox
代表“所有”选项的代表,并且在检查时,它会禁用ComboBox
仅选择单个项目的方法。如果我CheckBox
被选中,有时用户会混淆看到剩余的值ComboBox
因为该值在 UI 的该状态下没有任何意义。
另一个要求是解决方案不能修改SelectedValue
、SelectedIndex
或SelectedItem
的值,ComboBox
因为我想在用户取消选中 "All" 的情况下保留先前选择的项目CheckBox
。
基于 HCL 答案的解决方案:
<ComboBox IsEnabled="{Binding ElementName=myCheckBox, Path=IsChecked}"
ItemsSource="{Binding Path=MyItems}"
SelectedValue="{Binding Path=MySelectedItem}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ContentControl x:Name="content" Content="{Binding MyItemDescription}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}, Path=IsEnabled}"
Value="False">
<Setter TargetName="content"
Property="Visibility"
Value="Hidden" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>