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

.NET MAUI中Entry为空时焦点回退而非前进的实现方法

在.NET MAUI中实现删除Entry内容为空时切换至上一个Entry焦点

实现思路

核心是利用Entry的TextChanged事件,判断内容是否因删除变为空,若满足条件则将焦点切换到上一个Entry控件。通过维护有序的Entry列表,可以快速定位目标控件。

步骤1:布局中定义Entry控件

在XAML里添加需要的Entry,给每个控件设置唯一名称,并绑定同一个TextChanged事件:

<VerticalStackLayout Padding="10" Spacing="10">
    <Entry x:Name="entryFirst" TextChanged="Entry_TextChanged" Placeholder="第一个输入框"/>
    <Entry x:Name="entrySecond" TextChanged="Entry_TextChanged" Placeholder="第二个输入框"/>
    <Entry x:Name="entryThird" TextChanged="Entry_TextChanged" Placeholder="第三个输入框"/>
</VerticalStackLayout>

步骤2:维护Entry有序列表

在页面后台代码中,定义List存储所有Entry,确保顺序与布局一致:

private List<Entry> _orderedEntries;

protected override void OnAppearing()
{
    base.OnAppearing();
    // 按布局顺序添加Entry到列表
    _orderedEntries = new List<Entry> { entryFirst, entrySecond, entryThird };
}

步骤3:编写TextChanged事件处理逻辑

在事件方法中,判断当前Entry是否因删除操作变为空,满足条件则切换焦点到上一个Entry:

private void Entry_TextChanged(object sender, TextChangedEventArgs e)
{
    // 确认触发事件的是当前Entry,且是删除内容导致文本为空
    if (sender is Entry currentEntry 
        && string.IsNullOrEmpty(currentEntry.Text) 
        && !string.IsNullOrEmpty(e.OldTextValue))
    {
        int currentIndex = _orderedEntries.IndexOf(currentEntry);
        // 不是第一个Entry时,切换到上一个
        if (currentIndex > 0)
        {
            _orderedEntries[currentIndex - 1].Focus();
        }
    }
}

关键细节说明

  • 条件!string.IsNullOrEmpty(e.OldTextValue)用于区分“删除内容至空”和“初始为空”的场景,避免页面加载时误触发焦点切换。
  • 若Entry为动态生成,只需在创建控件时将其添加到_orderedEntries列表,核心逻辑无需修改。

内容的提问来源于stack exchange,提问作者Isabelle Galvão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:22:32