首页 > 解决方案 > Xamarin 表单条目返回类型未按预期工作

问题描述

我尝试在 Xamarin Forms 3 中设置新功能,ReturnType并且我已将其设置为Next. 我的表单有多个字段,我想让下一个条目在按下Next按钮时成为焦点。但是它只是关闭键盘。我确实阅读了这些文件,但是我找不到将其重点放在下一个的方法Entry。有人可以指导吗?

提前致谢。

标签: xamarin.forms

解决方案


想知道我是怎么实现的,如下:

我创建了一个行为来处理OnAttachedToandOnDetachingFrom以便我可以处理Completed事件以移动焦点。现在为此,我需要一个BindableProperty. 我根据逻辑创建了以下代码:

public class NextEntryBehavior : Behavior<Entry>
{
    public static readonly BindableProperty NextEntryProperty = BindableProperty.Create(nameof(NextEntry), typeof(Entry), typeof(Entry), defaultBindingMode: BindingMode.OneTime, defaultValue: null);

    public Entry NextEntry
    {
        get => (Entry)GetValue(NextEntryProperty);
        set => SetValue(NextEntryProperty, value);
    }

    protected override void OnAttachedTo(Entry bindable)
    {
        bindable.Completed += Bindable_Completed;
        base.OnAttachedTo(bindable);
    }

    private void Bindable_Completed(object sender, EventArgs e)
    {
        if (NextEntry != null)
        {
            NextEntry.Focus();
        }
    }

    protected override void OnDetachingFrom(Entry bindable)
    {
        bindable.Completed -= Bindable_Completed;
        base.OnDetachingFrom(bindable);
    }
}

如您所见,有一个NextEntry属性,一旦用户使用 Next 按钮将其标记为完成,我们通过 XAML 使用它来关注所需的输入字段。

XAML:

<Entry ReturnType="Next">
    <Entry.Behaviors>
        <behaviors:NextEntryBehavior NextEntry="{x:Reference LastName}" />
    </Entry.Behaviors>
</Entry>

在上述行为中,我使用的 LastName 引用是当用户点击 Next 时焦点应该转到的控件。通过这种方式,它可以按预期工作,并且可以在整个项目中重复使用。


推荐阅读