我在使用xamarin手势时遇到一些麻烦。我使用了一个我在网上发现的一个例子,它将一个Image控件包装在一个处理平移手势的PanContainer中:
using System;
using Xamarin.Forms;
namespace TestGestures
{
public class PanContainer : ContentView
{
double x, y;
public PanContainer ()
{
// Set PanGestureRecognizer.TouchPoints to control the
// number of touch points needed to pan
var panGesture = new PanGestureRecognizer ();
panGesture.PanUpdated += OnPanUpdated;
GestureRecognizers.Add (panGesture);
}
void OnPanUpdated (object sender, PanUpdatedEventArgs e)
{
switch (e.StatusType) {
case GestureStatus.Running:
// Translate and ensure we don't pan beyond the wrapped user interface element bounds.
Content.TranslationX = Math.Max (Math.Min (0, x + e.TotalX), -Math.Abs (Content.Width - App.ScreenWidth));
Content.TranslationY = Math.Max (Math.Min (0, y + e.TotalY), -Math.Abs (Content.Height - App.ScreenHeight));
break;
case GestureStatus.Completed:
// Store the translation applied during the pan
x = Content.TranslationX;
y = Content.TranslationY;
break;
}
}
}
}
包装用法:
public HomePageCS ()
{
Content = new AbsoluteLayout {
Padding = new Thickness (20),
Children = {
new PanContainer {
Content = new Image {
Source = ImageSource.FromFile ("MonoMonkey.jpg"),
WidthRequest = 1024,
HeightRequest = 768
}
}
}
};
}
这个例子非常好,完全没问题。
当我用一个继承自View
并且每个平台都有一个客户渲染器的控件替换PanContainer中包含的图像时,问题就开始了。当我这样做时,OnPanUpdated方法永远不会被调用。
是否有人知道为什么会在View
上发生这种情况,是否有任何解决方法可以让它发挥作用?