如何确定Xamarin Forms中水龙头的位置?

时间:2016-06-07 12:48:56

标签: c# xamarin.ios xamarin.forms gestures

在Xamarin表格中如何找出水龙头的位置(比如图像中)?我的代码是:

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += OnTapGestureRecognizerTapped;
image.GestureRecognizers.Add(tapGestureRecognizer);
...
...
void OnTapGestureRecognizerTapped(object sender, EventArgs args)
{ ... }

args.Parameter返回null(对于iOS)。我没有找到任何参数文档。 在处理程序中,我尝试将EventArgs更改为TappedEventArgs但后来没有编译。还尝试将args转换为TappedEventArgs,但这并未改变任何内容。

3 个答案:

答案 0 :(得分:1)

在撰写此答案的那一刻,似乎没有办法在没有平台特定代码的情况下接收XamarinForms中的点击坐标。有第三方库(mentioned here)提供此信息。

答案 1 :(得分:1)

为了获得触摸的位置,您必须为页面创建一个自定义渲染器。这是一个示例:

public class ExtendedContentPageRenderer : PageRenderer
{
    private ExtendedContentPage _thePage;
    private UITapGestureRecognizer _tapGestureRecognizer;

    public ExtendedContentPageRenderer()
    {
        _tapGestureRecognizer = new UITapGestureRecognizer(a => UITapGestureRecognizerHandler(a))
        {
            ShouldRecognizeSimultaneously = (recognizer, gestureRecognizer) => true,
            ShouldReceiveTouch = (recognizer, touch) => true,
        };
        _tapGestureRecognizer.DelaysTouchesBegan = _tapGestureRecognizer.DelaysTouchesEnded = _tapGestureRecognizer.CancelsTouchesInView = false;
    }

    private void UITapGestureRecognizerHandler(UITapGestureRecognizer gestureRecog)
    {
        if (gestureRecog.State == UIGestureRecognizerState.Ended)
        {
            var endPos = gestureRecog.LocationOfTouch(0, gestureRecog.View);

            _thePage.TriggerTouchDown(endPos.X, endPos.Y);
        }
    }

    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        if (e.OldElement != null)
        {
            View.RemoveGestureRecognizer(_tapGestureRecognizer);
            _thePage = null;
        }

        if (e.NewElement != null)
        {
            _thePage = e.NewElement as ExtendedContentPage;
            View.AddGestureRecognizer(_tapGestureRecognizer);
        }

        base.OnElementChanged(e);
    }
}

如您所见,我创建了一个自定义页面,用于将触摸事件传播回主页。然后,在页面中,您可以查看所传递的触摸坐标是否位于考虑的图像视图范围之内。

答案 2 :(得分:1)

经过几天的寻找最简单的解决方案,我终于找到了它(实际上很遗憾,没有构建方法来获得抽头坐标...)。无论如何,这就是您要寻找的东西: https://docs.microsoft.com/en-gb/xamarin/xamarin-forms/app-fundamentals/effects/touch-tracking

此处提供示例:

https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/effects-touchtrackingeffect/

我已经在我的应用程序中尝试过了,您所需要的只是

  • TouchActionEventArgs.cs

  • TouchActionEventHandler.cs

  • TouchActionType.cs

  • TouchEffect.cs

添加到项目(仅重命名空间),然后将TouchEffect.cs添加到.Android部分(再次重命名所有名称以与您的应用程序名称相对应)。

然后就可以了,编码愉快;)