Как получить ввод с мобильной виртуальной клавиатуры в MAUI?

Я хотел бы знать, какая клавиша нажата на мобильной клавиатуре, но @onkeyup срабатывает только при нажатии мобильного эквивалента ввода, при этом KeyboardEventArgs.Code соответствует пустой строке. Я пытался найти любую информацию о мобильном эквиваленте KeyboardEventArgs или даже о том, почему @onkeyup не срабатывает при нажатии каждой клавиши, несмотря на то, что onkeyup = "this.value = this.value.toUpperCase()" работает над каждым нажатием клавиши нормально. Я откровенно сбит с толку.

HTML-код, который работает:

<input @bind = "StringInput" id = "textInput" onkeyup = "this.value = this.value.toUpperCase()" />

Код Blazor, который я пробовал:

<input @bind = "StringInput" id = "textInput" @onkeyup = "InputReceivedInput" />

@code {
    private string StringInput = string.Empty;

    private void InputReceivedInput(KeyboardEventArgs Args)
    {
        if (Args.Code == "Enter" || Args.Code == "NumpadEnter")
        {
            //call another function
        }
        else
        {
            StringInput = StringInput.ToUpper();
        }
    }
}

Вторая попытка (только измененная часть HTML):

<input @bind = "StringInput" id = "textInput" onkeyup = "@InputReceivedInput" />

Я думаю, что это практически невозможно, согласно документации Android: «Поскольку методы мягкого ввода могут использовать несколько изобретательных способов ввода текста, нет никакой гарантии, что любое нажатие клавиши на программной клавиатуре сгенерирует ключевое событие: это оставлено на усмотрение пользователя». На усмотрение IME, и на самом деле отправка таких событий не рекомендуется. Никогда не следует рассчитывать на получение KeyEvents для любой клавиши при программном методе ввода. В частности, программная клавиатура по умолчанию никогда не будет отправлять какие-либо события клавиш в любое приложение, предназначенное для Jelly Bean или более поздней версии. ..». См.: Developer.android.com/reference/android/view/KeyEvent

rentoulis 10.06.2024 15:18

Это отстой. Есть ли функция ontextchange, которую я мог бы использовать вместо этого? Может быть, я смогу каждый раз проверять его на '\n'...

Frasher Gray 10.06.2024 15:22

Вы можете использовать событие TextChange: «Кроме того, InputView определяет событие TextChanged, которое возникает при изменении текста в записи. Объект TextChangedEventArgs, который сопровождает событие TextChanged, имеет свойства NewTextValue и OldTextValue, которые определяют новый и старый текст соответственно. .». См.: Learn.microsoft.com/en-us/dotnet/maui/user-interface/control‌​s/…

rentoulis 10.06.2024 16:06
Learn.microsoft.com/en-us/dotnet/api/…
H.A.H. 11.06.2024 09:30
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
4
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я протестировал предоставленный вами код, и у метода onkeyup возникла проблема: он не может обновить данные после нажатия кнопки на клавиатуре. Об этой проблеме вы можете сообщить об этой проблеме на GitHub.

Кроме того, я нашел еще один способ добиться этого: используя @bind:get и @bind:set. Для получения дополнительной информации вы можете проверить этот документ о привязке данных ASP.NET Core Blazor.

<input @bind:event = "oninput" @bind:get = "StringInput" @bind:set = "OnInput" id = "textInput" />

<p>
    <code>StringInput</code>: @StringInput
</p>

<input @bind = "StringInput" id = "textInput" onkeyup = "this.value = this.value.toUpperCase()" />

@code {
    private string StringInput = string.Empty;

    private void OnInput(string value)
    {
        var newValue = value ?? string.Empty;

        StringInput = newValue.ToUpper();
    }
}

К сожалению, хотя этот код по-прежнему не позволяет мне определить, когда была нажата клавиша ввода, альтернатива, которую вы нашли с помощью @bind:get и @bind:set, позволяет тексту появляться на экране в верхнем регистре, а не сначала отображаться в нижнем регистре, а затем обновляться. Спасибо!

Frasher Gray 11.06.2024 14:02

Другие вопросы по теме