Events 点击手势识别器不处理Xamarin表单中的形状?

Events 点击手势识别器不处理Xamarin表单中的形状?,events,xamarin.forms,gesture,shapes,tap,Events,Xamarin.forms,Gesture,Shapes,Tap,我在Xamarin Forms中为一个形状对象配备了一个轻拍手势识别器,用于对轻拍事件做出反应,但是,它不起作用。我尝试过路径、多边形和多段线对象。将形状包装在框架中是可行的,但前提是我点击形状外部的区域。那不是我想要的。在ContentView中换行也不会显示任何效果。也许这都是因为形状在XF中仍然是实验性的(您必须在应用程序类中设置shapes\u experimental标志才能使用形状) 下面是一个简单的示例,适用于长方体,但不适用于三角形,在iOS上测试: public class T

我在Xamarin Forms中为一个形状对象配备了一个轻拍手势识别器,用于对轻拍事件做出反应,但是,它不起作用。我尝试过路径、多边形和多段线对象。将形状包装在框架中是可行的,但前提是我点击形状外部的区域。那不是我想要的。在ContentView中换行也不会显示任何效果。也许这都是因为形状在XF中仍然是实验性的(您必须在应用程序类中设置shapes\u experimental标志才能使用形状)

下面是一个简单的示例,适用于长方体,但不适用于三角形,在iOS上测试:

public class TestPage : ContentPage
    {
        public TestPage()
        {
            var tgr = new TapGestureRecognizer();
            tgr.Tapped += async (s, e) => {
                await DisplayAlert("Info", "Tapped", "OK");
            };

            Polygon triangle = new Polygon
            {
                Points = new PointCollection(),
                Fill = Brush.Blue,
            };
            triangle.Points.Add(new Point(0, 0));
            triangle.Points.Add(new Point(100, 0));
            triangle.Points.Add(new Point(50, 50));

            triangle.GestureRecognizers.Add(tgr);

            BoxView box = new BoxView
            {
                HeightRequest = 50,
                Color = Color.Red
            };

            box.GestureRecognizers.Add(tgr);

            Content = new StackLayout
            {
                Children = { triangle, box },
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.Center
            };
        }
    }
有人知道如何使手势与形状配合使用的解决方案或解决方法吗


提前谢谢你的帮助

为什么不在
三角形
周围环绕一个
框架
,并在那里添加
选项卡识别器

这是iOS多边形/多段线实现中的一个错误

要解决此问题,请在另一个视图中包装
形状
,并将
多边形
上的
input transparent
设置为true。 当形状位于另一个元素中时,该形状仍然位于顶部,并且仍然从用户处获得点击,因此您必须将点击向下传递到包装容器,无论是框架还是ContentView。例如:

    var tgr = new TapGestureRecognizer();
    tgr.Tapped += async (s, e) => {
        await DisplayAlert("Info", "Tapped", "OK");
    };

    Polygon triangle = new Polygon
    {
        Points = new PointCollection(),
        Fill = Brush.Blue,
    };
    triangle.Points.Add(new Point(0, 0));
    triangle.Points.Add(new Point(100, 0));
    triangle.Points.Add(new Point(50, 50));
    triangle.InputTransparent = true;  // <------------------------set InputTransparent to True

    var frame= new Frame(); 
    frame.Content = triangle; // <--------------------- add to Frame
 
    frame.GestureRecognizers.Add(tgr); // <-----------TapGestureRecognizer on Frame

    Content = new StackLayout
    {
        Children = { frame }, // <------------------------ add Frame to view heirarchy
        HorizontalOptions = LayoutOptions.Center,
        VerticalOptions = LayoutOptions.Center
    };
var tgr=new-TapGestureRecognizer();
tgr.Tapped+=异步(s,e)=>{
等待显示警报(“信息”、“点击”、“确定”);
};
多边形三角形=新多边形
{
Points=新的PointCollection(),
填充=刷子。蓝色,
};
三角形.Points.Add(新点(0,0));
三角形点添加(新点(100,0));
三角形。点。添加(新点(50,50));

triangle.InputTransparent=true;//我认为这是Xamarin.forms的问题,我在这里找到了一个相关的。我检查了多边形的形状,发现它是iOS中的CALayer。CALayer不会响应TapSirth,我认为这可能是原因。我认为Shape类是从View类继承的,因此tap Sirth事件将自动包括在内,与iOS中多边形是CALayer这一事实无关。但我对iOS框架不太熟悉,无法完全理解。如果我找到解决方案,将在此处更新:)。我已经将三角形包装在一个框架中,但这只适用于三角形外的框架区域,即如果我点击三角形,则不会触发事件,但是,如果我点击补码区域(框架减去三角形)它起作用了。但这不是我想要的。在ContentView中包装也不适合我。Thx@jgoldberger!InputTransparent属性是缺少的链接,无法在框架或ContentView中进行包装。但是,解决方案仍然不完美(对于我的应用程序),因为Frame和ContentView具有矩形。例如,对于三角形,我现在可以点击三角形外部但包装对象内部的区域来触发事件。是否有可能将形状无缝地包裹起来?由于形状来源于视图,因此它也是矩形的,因此即使没有包裹,您也会得到相同的东西。在Android上试试,你不需要包装形状,你会看到同样的效果。我将在上面的答案中添加更多信息,以供选择。Thx@jgoldberger MSFT有助于我理解这种行为!