IsEnabled
がfalseに設定されている場合、何も選択されていないかのようにWPF ComboBox
を空白にする方法が考えられます。いつものように、私はWPFで常に苦労しているComboBox
のコントロールテンプレート全体を再定義せずにこれをやろうとしています。コントロールテンプレートComboBox
全体を再定義するよりも洗練されたソリューションがあれば教えてください。無効なときに何も選択されていないことを示すWPF ComboBox
私がしようとしている理由は、「すべて」オプションを表すCheckBox
です。このチェックボックスをオンにすると、1つの個別アイテムだけを選択するために使用されるComboBox
が無効になります。 CheckBox
がチェックされていると、その値がUIのその状態で意味を持たないので、ユーザはComboBox
に残っている値を表示することをユーザに混乱させることがあります。
別の要件は、私は、ユーザーが「すべて」CheckBox
のチェックを外した場合にpreviuosly選択されたアイテムを保持したいので、溶液はSelectedValue
、SelectedIndex
、又はComboBox
のSelectedItem
値を変更できないことです。 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>
私は間違っている可能性がありますが、残念ながらこれは私のテストでは機能しませんでした。私はItemTemplateを指定するよりもシンプルさが好きでした。 – jpierson
このメソッドが実際に可能かどうかを調べる際に、私はMSDNフォーラムでこの記事を見てきましたが、これはかなり興味深いようです。 http://social.msdn.microsoft.com/Forums/en/wpf/thread/4c359378-ba98-42a1-a468-0f18f5626fcc – jpierson