Я работал над WinForms и WPF раньше, но я впервые работаю в UWP.
Я пытаюсь создать текстовое поле для этого поиска в списке элементов, и оно возвращает поиск и элементы списка, но когда вы пытаетесь перемещаться по ним с помощью клавиатуры, первый результат снова будет найден, что приведет к гибели остальной части поиска.
это код XAML для AutoSuggestBox:
<AutoSuggestBox
PlaceholderText="Buscar" QueryIcon="Find" ItemTemplateSelector="{StaticResource ExplorerItemTemplateSelector}"
ItemsSource="{x:Bind SearchResult}" TextChanged="AutoSuggestBox_TextChanged"
SuggestionChosen="AutoSuggestBox_SuggestionChosen" QuerySubmitted="AutoSuggestBox_QuerySubmitted"
/>
И это код C#:
private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
{
SearchResult = indexedTree.FindAll(x => x.Name.ToLower().Contains(sender.Text.ToLower()));
if (SearchResult.Count < 0)
SearchResult.Clear();
sender.ItemsSource = SearchResult;
}
}
private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
{
if (args.SelectedItem is ExplorerItem item)
sender.Text = item.Name;
}
private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
{
if(args.ChosenSuggestion != null && args.ChosenSuggestion is ExplorerItem item)
{
sender.Text = item.Name;
sender.ItemsSource = null;
}
}
Я предполагаю, что каким-то образом выбранное событие также вызывает событие изменения текста в качестве пользовательского ввода, но я не уверен, я посмотрел код галереи элементов управления XAML и в этом приложении работает нормально, а код действительно похож