Когда открыт список предложений, клавиши со стрелками вверх / вниз автоматически запускают событие SuggestionChosen. Мне интересно, есть ли способ перехватить нажатие этой клавиши? Я пытался использовать события KeyDown и KeyUp для перехвата этих нажатий клавиш, но событие SuggestionChosen происходит до событий KeyDown / Up. Это фактически заставляет пользователя выбирать либо первое, либо последнее предложение в списке. Выбор мыши или касания в порядке.
Я бы просто хотел игнорировать клавиши со стрелками при наборе текста в AutoSuggestBox. Или не заставляйте пользователя выбирать первый или последний пункт с помощью клавиш со стрелками. Есть ли способ сделать это? Спасибо
XAML
<AutoSuggestBox Name="EmailSuggestBox"
PlaceholderText="Email"
Text="{Binding Customer.EmailAddress, Mode=TwoWay}"
TextChanged="EmailSuggestBox_TextChanged"
QuerySubmitted="EmailSuggestBox_QuerySubmitted"
SuggestionChosen="EmailSuggestBox_SuggestionChosen"
LostFocus="EmailSuggestBox_LostFocus"
KeyUp="EmailSuggestBox_KeyUp"
KeyDown="EmailSuggestBox_KeyDown" />
Методы (Примечание: vm.EmailOptions - это просто список предложений домена электронной почты)
private void EmailSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
try
{
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
{
if (sender.Text.Contains('@'))
{
var vm = this.DataContext as ProspectInformationEntryViewModel;
var d = sender.Text.Split('@');
var domain = d.LastOrDefault();
List<String> _emailSuggestion = vm.EmailOptions.Where(x => x.StartsWith(domain)).ToList();
sender.ItemsSource = _emailSuggestion;
}
}
}
catch (Exception)
{ }
}
private void EmailSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
{
try
{
if (args.ChosenSuggestion != null)
{
sender.ItemsSource = null;
}
}
catch (Exception)
{ }
}
private void EmailSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
{
try
{
var domain = args.SelectedItem.ToString();
var temp = sender.Text.Split('@');
var identifier = temp.FirstOrDefault();
sender.Text = identifier + "@" + domain;
sender.ItemsSource = null;
}
catch (Exception)
{ }
}
private void EmailSuggestBox_KeyUp(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Down || e.Key == Windows.System.VirtualKey.Up)
{
e.Handled = true;
}
}
private void EmailSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Down || e.Key == Windows.System.VirtualKey.Up)
{
e.Handled = true;
}
}