Я думаю о разных способах отображения WPF ComboBox
пустым, как будто ничего не выбрано, если для IsEnabled
установлено значение false. Как всегда, я пытаюсь сделать это без необходимости переопределять весь шаблон управления для ComboBox
, что всегда является борьбой, с которой я сталкиваюсь с WPF. Если у кого-нибудь есть какие-либо решения, более элегантные, чем переопределение всего шаблона управления ComboBox
, пожалуйста, дайте мне знать.
Причиной того, что я пытаюсь сделать, является то, что у меня есть CheckBox
, который представляет опцию "Все", и когда отмечен, он отключает ComboBox
, который используется для выбора только одного отдельного элемента. Если мой CheckBox
отмечен, пользователям иногда сложно увидеть значение, оставшееся в ComboBox
, поскольку это значение не имеет значения в этом состоянии пользовательского интерфейса.
Другое требование состоит в том, что решение не может изменять значения SelectedValue
, SelectedIndex
или SelectedItem
ComboBox
, поскольку я хотел бы сохранить ранее выбранный элемент в случае, если пользователи снимут флажок «Все "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>