WPF ComboBox禁止选择

时间:2013-02-20 16:44:41

标签: c# wpf combobox filter

我有一个ComboBox声明如下:

<ComboBox 
    Name="cmb" Height="20" Width="125" Margin="5,3,0,0" 
    Text="{Binding SomeList}"
    UpdateSourceTrigger=PropertyChanged}" 
    Validation.ErrorTemplate="{StaticResource errorTemplate}"
    IsEditable ="True"
    IsSynchronizedWithCurrentItem="True"/>

我正在尝试根据ComboBox中输入的内容过滤项目列表。现在,我尝试了自定义控件,处理KeyUp的{​​{1}}事件等等,但我经常遇到的一个问题是我在ComboBox中输入一个字母的那一刻第一个匹配项填充在ComboBox中,然后过滤器仅返回匹配项,使列表只有一个项。以下是TextBox事件处理程序和KeyUp

FilterPredicate

private bool FilterPredicate(object value) { if (value == null) return false; if (cmb.Text.Length == 0) return true; string prefix = cmb.Text; return value.ToString().ToLower().Contains(prefix.ToLower()); } private void cmb_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) { ComboBox cbSender = sender as ComboBox; cbSender.Items.Filter = null; if (e.Key == System.Windows.Input.Key.Escape || e.Key == System.Windows.Input.Key.Tab || e.Key == System.Windows.Input.Key.Enter) { cbSender.IsDropDownOpen = false; } else if (e.Key == System.Windows.Input.Key.Down) { cbSender.IsDropDownOpen = true; } else { if (cbSender.HasItems) { cbSender.IsDropDownOpen = true; } } } 的过滤器绑定到构造函数中的ComboBox

如果您需要更多信息,请与我们联系。

谢谢

1 个答案:

答案 0 :(得分:0)

禁用isTextSearchEnabled属性对我来说很有用。