在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,但这并未改变任何内容。
答案 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
部分(再次重命名所有名称以与您的应用程序名称相对应)。
然后就可以了,编码愉快;)