如何从 MAUI 中的移动虚拟键盘获取输入?

问题描述 投票:0回答:1

我希望能够知道在移动键盘上按下了哪个键,但 @onkeyup 仅在按下相当于 Enter 的移动设备时触发,其中 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" />
html blazor maui onkeyup
1个回答
0
投票

我测试了您提供的代码,

onkeyup
方法存在按下键盘后无法更新数据的问题。对于此问题,您可以在 GitHub issues 上报告。

此外,我还找到了另一种方法来实现这一点。通过使用

@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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.