我有一個簡單的組合框與複選框作爲項目。我如何防止項目的實際選擇。用戶應該只能夠選中或取消選中複選框?wpf與複選框組合框 - selecteditem
當前,如果我點擊某個元素(而不是內容或檢查本身),它會變成被選中的。與此問題是:ComboBox的TextProperty綁定到一個值顯示檢查項目的名稱。但是,如果選擇了一個ComboBoxItem,則顯示的文本將變爲所選項目的ViewModel的值。
先感謝您的任何建議。
我有一個簡單的組合框與複選框作爲項目。我如何防止項目的實際選擇。用戶應該只能夠選中或取消選中複選框?wpf與複選框組合框 - selecteditem
當前,如果我點擊某個元素(而不是內容或檢查本身),它會變成被選中的。與此問題是:ComboBox的TextProperty綁定到一個值顯示檢查項目的名稱。但是,如果選擇了一個ComboBoxItem,則顯示的文本將變爲所選項目的ViewModel的值。
先感謝您的任何建議。
好吧,我已經嘗試過使用GetBindingExpression(...)。UpdateTarget(),因爲我的TextProperty綁定,但沒有任何事情發生。此功能只會在佈局更新後才起作用。所以結果:
/// <summary>
/// Prevents the selection of an item and displays the result of the TextProperty-Binding
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SeveritiesComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox box = sender as ComboBox;
if (box == null)
return;
if (box.SelectedItem != null)
{
box.SelectedItem = null;
EventHandler layoutUpdated = null;
layoutUpdated = new EventHandler((o, ev) =>
{
box.GetBindingExpression(ComboBox.TextProperty).UpdateTarget();
box.LayoutUpdated -= layoutUpdated;
});
box.LayoutUpdated += layoutUpdated;
}
}
樣,如果你改變你的組合框的ItemsControl什麼:
<ItemsControl ItemsSource="{Binding Path= Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Checked}" Content="{Binding Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
有一個ItemsControl,而不是一個組合框將顯示所有項目只可檢查的。
我用的是組合框的原因是,我有這方面我在哪裏使用它沒有那麼多的地方。如果我使用itemcontrol,我將無法「彈出」複選框。使用擴展器也不令人滿意。 – SACO
所以你可以改變選擇風格的外觀。檢查[這個問題](http://stackoverflow.com/questions/3829315/stop-highlighting-selected-item-wpf-combobox) – WaltiD
謝謝你的回答。我找到了另一個解決方案 – SACO