Xamarin 当条目控件为空时如何检测其退格

Xamarin 当条目控件为空时如何检测其退格,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我在Android上使用Xamarin.Forms。我有一个表单,它有4个输入控件供用户输入代码。我使用TextChanged事件检测用户输入并自动将焦点移动到下一个控件。这部分工作正常,即当用户键入数字时,数字焦点自动跳转到下一个条目。然而,我需要实现相反的效果,用户应该能够点击backspace按钮,焦点应该移到上一个控件。问题是当入口控件为空时,不会触发TextChanged。我怎样才能做到这一点?我可以为android创建一个自定义渲染器来捕获文本输入吗?也许有一种方法可以使用1个条目,

我在Android上使用Xamarin.Forms。我有一个表单,它有4个输入控件供用户输入代码。我使用TextChanged事件检测用户输入并自动将焦点移动到下一个控件。这部分工作正常,即当用户键入数字时,数字焦点自动跳转到下一个条目。然而,我需要实现相反的效果,用户应该能够点击backspace按钮,焦点应该移到上一个控件。问题是当入口控件为空时,不会触发TextChanged。我怎样才能做到这一点?我可以为android创建一个自定义渲染器来捕获文本输入吗?也许有一种方法可以使用1个条目,但我需要使它看起来像4个不同的框。

最后,我通过在android中实现渲染器找到了解决方案

在共享代码(PCL)中,创建如下类

public class CustomEntry:Entry
{
    public delegate void BackspaceEventHandler(object sender, EventArgs e);

    public event BackspaceEventHandler OnBackspace;

    public CustomEntry()
    {

    }

    public void OnBackspacePressed()
    {
        if (OnBackspace != null)
        {
            OnBackspace(null, null);
        }
    }
}
然后,在您的android项目中创建如下渲染器:

 public class CustomEntryRenderer: EntryRenderer
 {
    public override bool DispatchKeyEvent(KeyEvent e)
    {
        if (e.Action == KeyEventActions.Down)
        {
            if (e.KeyCode == Keycode.Del)
            {
                if (string.IsNullOrWhiteSpace(Control.Text))
                {
                    var entry = (PasswordBox)Element;
                    entry.OnBackspacePressed();
                }
            }
        }
        return base.DispatchKeyEvent(e);
    }

    protected override void 
    OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);
    }
}
Entry1.OnBackspace += Entry1BackspaceEventHandler;

public void Entry1BackspaceEventHandler()
{
//things you want to do
}

如果有帮助的话,delete/backspace的ASCII字符是“0x7f”,因此您可能可以检测到键盘输入,然后编写相应的操作?为什么不使用
Return
键将焦点移动到下一个控件?不建议使用Text changed event来更改焦点,它可以处理其他逻辑问题。回答很好。。我不知道为什么人们否决了这个答案。很有魅力。。稍加修改void Entry1BackspaceEventHandler(objectsender,Xamarin.Forms.TextChangedEventArgs e){您是2021年的英雄,谢谢。它工作得非常好。