UWP AutoSuggestBox - клавиши стрелок вверх / вниз запускают пожертвования - PullRequest
0 голосов
/ 11 сентября 2018

Когда открыт список предложений, клавиши со стрелками вверх / вниз автоматически запускают событие 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;
        }
    }

1 Ответ

0 голосов
/ 12 сентября 2018

Я просто хотел бы игнорировать клавиши со стрелками при наборе в AutoSuggestBox.

Для вашего требования вы можете использовать событие ProcessKeyboardAccelerators для перехвата нажатия клавишили нажмите клавишу.

private void Autosbox_ProcessKeyboardAccelerators(UIElement sender, ProcessKeyboardAcceleratorEventArgs args)
{

    if (args.Key == VirtualKey.Down || args.Key == VirtualKey.Up)
    {
        args.Handled = true;
    }
}
...