Просто разработать на хорошие ответы уже даны.
Во-первых, ответ jesse - set IsTextCompletionEnabled="True"
, простой - заполняет текстовое поле после каждого нажатия клавиши с первым элементом в списке. Когда вы нажимаете кнопку ввода, всплывающее окно закрывается. Причина, по которой я не использовал этот подход, заключается в том, что он немедленно обновляет SelectedItem
, не дожидаясь, пока пользователь нажмет клавишу ввода.
Ответ Сико - это то, что я использовал. Для доступа к методу GetTemplateChild
требуется подклассификация элемента управления AutoCompleteBox
. Вот код:
public class ExtendedAutoCompleteBox : AutoCompleteBox
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
UpdateSelection();
}
}
private void UpdateSelection()
{
// get the source of the ListBox control inside the template
var enumerator = ((Selector)GetTemplateChild("Selector")).ItemsSource.GetEnumerator();
// update Selecteditem with the first item in the list
enumerator.Reset();
if (enumerator.MoveNext())
{
var item = enumerator.Current;
SelectedItem = item;
// close the popup, highlight the text
IsDropDownOpen = false;
(TextBox)GetTemplateChild("Text").SelectAll();
}
}
}
К сожалению, это не работает. Только один элемент отображается в списке, когда пользователь вводит – Sico