Допустим, у меня есть ComboBox
с именем comboBox
.
. Я хочу отключить функцию автозаполнения ComboBox
.
Сначала я подумал, что все, что мне нужноdo устанавливает IsTextSearchEnabled
на false
следующим образом
comboBox.IsTextSearchEnabled = false;
Но, похоже, это вызывает некоторые неожиданные побочные эффекты.
Когда IsTextSearchEnabled = true
(по умолчанию используется в выпадающем списке)если вы попытаетесь установить значение для 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
Теперь, когда я попыталсячтобы установить IsTextSearchEnabled = false
, ComboBox
SelectedIndex
не будет обновляться при изменении Text
.
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.Text = "3";
MessageBox.Show(comboBox.SelectedIndex.ToString()); // -1
Интересно, есть ли способ достичь того и другого (т.е. отключить AutoЗавершите функцию, и ComboBox по-прежнему будет автоматически обновлять свой SelectedIndex при изменении его текста)