Я придумал это решение. Я не думаю, что это самый оптимальный вариант, но он охватывает ваш случай. Я использую событие PreviewTextInput
для обработки выделения с помощью ввода текста и DropDownClosed
для обработки выделения с помощью мыши. Мой ComboBox
элемент управления называется cbTest1
, а код, который я использовал, выглядит следующим образом:
private void cbTest1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
var q = from i in cbTest1.ItemsSource.Cast<ComboBoxItem>()
where ((string)i.Content).StartsWith(e.Text, StringComparison.OrdinalIgnoreCase)
select i;
if (q.Count() == 1)
{
// Have typed out a unique name match.
var ActiveItem = cbTest1.SelectedItem;
}
else
{
// Name does not match or has multiple matches.
}
}
private void cbTest1_DropDownClosed(object sender, EventArgs e)
{
var ActiveItem = cbTest1.SelectedItem;
}
Он использует выражение Linq, чтобы определить, сузил ли выбор того, что пользователь до сих пор набрал, до одного элемента. Однако стоимость этого запроса может быть слишком высокой для вашего случая. Просто попробуйте и дайте мне знать.