如何在Entry控件为空时检测到退格键

时间:2019-02-07 03:55:41

标签: xamarin xamarin.forms xamarin.android

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

1 个答案:

答案 0 :(得分:0)

最后,我通过在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
}