我想出了不同的方法來讓WPF ComboBox
顯示爲空,就好像IsEnabled
設置爲false時沒有選擇任何東西。像往常一樣,我試圖做到這一點,而不必重新定義ComboBox
的整個控制模板,這始終是我與WPF的鬥爭。如果有人有任何解決方案比重新定義整個ComboBox
控制模板更優雅,請讓我知道。WPF ComboBox在禁用時不顯示任何選項(IsEnabled == false)
我試圖做的原因是我有一個CheckBox
代表一個「全部」選項,當選中時,它會禁用ComboBox
,它只用於選擇一個單獨的項目。如果我的CheckBox
被選中,用戶有時會看到ComboBox
中剩餘的值,因爲該值在用戶界面的這種狀態下沒有任何意義。
另一個要求是,該解決方案不能修改ComboBox
的SelectedValue
,SelectedIndex
,或SelectedItem
值,因爲我想保留的情況下的previuosly選擇的項目,該用戶取消選中「全部」 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>
不幸的是,這並沒有在我的測試中工作,雖然可能我有什麼問題。我喜歡簡單而不是指定一個ItemTemplate。 – jpierson 2011-01-19 21:55:16
在試圖找出這種方法是否真的有可能的時候,我在MSDN論壇上發現了這篇文章,看起來很有趣。 http://social.msdn.microsoft.com/Forums/en/wpf/thread/4c359378-ba98-42a1-a468-0f18f5626fcc – jpierson 2011-01-20 00:57:47