I'm thinking out different ways to have a WPF ComboBox
show blank as if nothing is selected when IsEnabled
is set to false. Like always I'm trying to do this without having to redefine the whole control template for the ComboBox
which is always a struggle I have with WPF. If anybody has any solutions more elegant than redefining the whole ComboBox
control template please let me know.
The reason for what I'm trying to do is I have a CheckBox
that represents an "All" option and when checked it disables the ComboBox
which is used to pick only a single individual item. If my CheckBox
is checked it is sometimes confusing to the users to see a value remaining in the ComboBox
since that value has no meaning in that state of the UI.
Another requirement is that the solution cannot modify the SelectedValue
, SelectedIndex
, or SelectedItem
values of the ComboBox
since I would like to retain the previuosly selected item in the case that the users unchecks the "All" CheckBox
.
Solution based on HCL's answer:
<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>
You can do something with triggers:
Try setting the ItemTemplate
to an empty DataTemplate
when the box is disabled. This will affect the rendering of the selected item and therefore hide it.
Another simple but not very nice solution would be to set the foreground color to the same as a background color.