UWP中如何实现AutoSuggestBox仅按Enter确认选中的键盘导航功能
解决方案
你需要修改两处配置即可实现需求:
- 调整AutoSuggestBox的XAML属性,关闭导航时自动填充文本的默认行为,新增键盘按下事件监听:
<AutoSuggestBox Name="MyAutoSuggestBox" PlaceholderText="Search" TextChanged="MyAutoSuggestBox_TextChanged" Width="150" ItemsSource="{x:Bind NotAddedPersons,Mode=OneWay}" GotFocus="MyAutoSuggestBox_GotFocus" UpdateTextOnSelect="False" KeyDown="MyAutoSuggestBox_KeyDown"> <AutoSuggestBox.ItemTemplate> <DataTemplate x:DataType="local:Person"> <TextBlock Text="{x:Bind Name, Mode=OneWay}"/> </DataTemplate> </AutoSuggestBox.ItemTemplate> </AutoSuggestBox>
说明:移除了原有
XYFocusKeyboardNavigation="Enabled"配置(AutoSuggestBox默认支持上下方向键导航建议列表),新增UpdateTextOnSelect="False"关闭导航时自动更新输入框内容的默认逻辑,新增KeyDown事件用于监听Enter键按下。
- 新增后台KeyDown事件处理逻辑,实现按Enter才确认选中建议项:
private void MyAutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key == Windows.System.VirtualKey.Enter) { // 仅当建议列表打开且存在选中项时执行逻辑 if (MyAutoSuggestBox.IsSuggestionListOpen && MyAutoSuggestBox.SelectedItem != null) { var selectedPerson = MyAutoSuggestBox.SelectedItem as Person; // 手动更新输入框文本为选中项内容 MyAutoSuggestBox.Text = selectedPerson.Name; // 关闭建议列表 MyAutoSuggestBox.IsSuggestionListOpen = false; // 光标移动到文本末尾 MyAutoSuggestBox.SelectionStart = MyAutoSuggestBox.Text.Length; // 如果你原有SuggestionChosen事件里有业务逻辑,直接在这里调用即可 // 示例:MyAutoSuggestBox_SuggestionChosen(null, new SuggestionChosenEventArgs { SelectedItem = selectedPerson }); } e.Handled = true; } }
内容的提问来源于stack exchange,提问作者Os Snehith Ab
相关产品推荐
相关产品推荐

