You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Maui中键盘Return键:隐藏键盘还是切换至下一个UI输入字段?

.NET Maui中Return键的行为处理方案

在.NET Maui开发中,Return键的行为没有强制统一的标准,完全取决于你的界面输入流程:

  • 如果是连续的表单输入场景(比如用户名→密码→验证码这类依次填写的输入框),优先将焦点切换到下一个输入字段,能提升用户填写效率;
  • 如果是单个输入框(比如搜索框、备注框),或者是表单的最后一个输入字段,按下Return键直接隐藏键盘会更符合用户预期。

具体实现方案

1. 切换到下一个输入字段

可以通过自定义附加属性的方式,给Entry绑定“下一个要聚焦的控件”,实现Return键自动跳转:

public static class EntryFocusHelper
{
    public static readonly BindableProperty NextFocusTargetProperty =
        BindableProperty.CreateAttached("NextFocusTarget", typeof(View), typeof(EntryFocusHelper), null, propertyChanged: OnNextTargetChanged);

    public static View GetNextFocusTarget(BindableObject view)
    {
        return (View)view.GetValue(NextFocusTargetProperty);
    }

    public static void SetNextFocusTarget(BindableObject view, View value)
    {
        view.SetValue(NextFocusTargetProperty, value);
    }

    private static void OnNextTargetChanged(BindableObject bindable, object oldValue, object newValue)
    {
        if (bindable is Entry entry && newValue is View nextView)
        {
            entry.ReturnCommand = new Command(() => nextView.Focus());
            entry.ReturnType = ReturnType.Next;
        }
    }
}

在XAML中使用:

<Entry x:Name="UsernameInput" local:EntryFocusHelper.NextFocusTarget="{x:Reference PasswordInput}" />
<Entry x:Name="PasswordInput" local:EntryFocusHelper.NextFocusTarget="{x:Reference VerifyCodeInput}" />
<Entry x:Name="VerifyCodeInput" ReturnType="Done" Completed="OnFinalEntryCompleted" />

2. 按下Return键隐藏键盘

针对单个输入框或最后一个输入字段,直接监听Completed事件并取消焦点:

private void OnFinalEntryCompleted(object sender, EventArgs e)
{
    ((Entry)sender).Unfocus();
}

也可以在XAML中直接绑定命令简化代码:

<Entry ReturnType="Done" Completed="OnFinalEntryCompleted" />

总结

核心是根据用户的输入场景选择对应行为,上面的代码可以覆盖绝大多数.NET Maui中Return键的处理需求,无需依赖平台特定代码即可实现跨平台效果。

内容的提问来源于stack exchange,提问作者Arup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 22:55:16