假设我有一个名为ComboBox
的{{1}}。
我想禁用comboBox
的自动完成功能。
起初,我认为我需要做的就是将其ComboBox
设置为IsTextSearchEnabled
,如下所示
false
但是似乎这样做会引起一些意想不到的副作用。
当comboBox.IsTextSearchEnabled = false;
(组合框的默认设置)时,如果您尝试为IsTextSearchEnabled = true
的{{1}}设置值,则组合框将在其ComboBox
中找到相应的索引并相应地更新其Text
。
ItemsSource
现在,当我尝试设置SelectedIndex
时,List<string> lst = new List<string>();
lst.Add("1");
lst.Add("2");
lst.Add("3");
lst.Add("4");
lst.Add("5");
MessageBox.Show(comboBox.SelectedIndex.ToString()); // -1
comboBox.ItemsSource = lst;
comboBox.Text = "3";
MessageBox.Show(comboBox.SelectedIndex.ToString()); // 2
的{{1}}的{{1}}更改时不会更新。
IsTextSearchEnabled = false
我想知道是否有一种方法可以同时实现(即禁用“自动完成”功能,并且仍然让ComboBox在更改其Text时自动更新其SelectedIndex)
答案 0 :(得分:0)
有几种方法可以达到它。在您使用字符串的情况下,只需设置Text
属性即可,而无需设置SelectedValue
:
List<string> lst = new List<string>();
lst.Add("1");
lst.Add("2");
lst.Add("3");
lst.Add("4");
lst.Add("5");
MessageBox.Show(comboBox.SelectedIndex.ToString()); // -1
comboBox.IsTextSearchEnabled = false;
comboBox.ItemsSource = lst;
comboBox.SelectedValue = "3";
MessageBox.Show(comboBox.SelectedIndex.ToString()); // 2
如果您有更复杂的数据类型作为字符串,则还可以设置SelectedValuePath
或在ItemsSource
的事件处理程序中的TextInput
中自己搜索它,并设置“ SelectedItem”。