如何覆盖Enter按下xamarin pcl UWP中的按钮?

时间:2017-11-16 07:59:23

标签: button xamarin uwp renderer xamarin.uwp

HY,

我正在开发一个带有大量UWP条目和按钮的xamarin PCL项目。对于我在自定义渲染器中添加的条目,使用keydown和keyup函数来检测Enter按下。结果它转到下一个UI元素。 对于一个按钮,我需要相同的检测,但在渲染器中没有进入功能键盘或keydown。

那么在执行原始命令之前如何让按钮检测到按下按钮?

这是我实施的代码。

public class CustomButtonRenderer : ButtonRenderer
{
    public CustomButtonRenderer()
    {
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
    {
        Xamarin.Forms.Button appButton = (Xamarin.Forms.Button)Element;
        base.OnElementChanged(e);
        if (Control != null && appButton != null)
        {
            Control.KeyUp += Control_KeyUp;
            Control.KeyDown += Control_KeyDown;
        }
    }


    private void Control_KeyDown(object sender, KeyRoutedEventArgs e)
    {
    }
    private void Control_KeyUp(object sender, KeyRoutedEventArgs e)
    {
        Xamarin.Forms.Button appButton = (Xamarin.Forms.Button)Element;
        switch (e.Key)
        {
            case (Windows.System.VirtualKey.Enter):
                {
                    FocusManager.TryMoveFocus(FocusNavigationDirection.Next);
                    break;
                }
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您需要将KeyRoutedEventArgs.Handled属性设置为true。这应该按照你的要求做到:

private void Control_KeyDown(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
    {
        FocusManager.TryMoveFocus(FocusNavigationDirection.Next);
        e.Handled = true;
    }
}