Forms 以编程方式添加手势时出现问题

Forms 以编程方式添加手势时出现问题,forms,xamarin,visual-studio-2019,Forms,Xamarin,Visual Studio 2019,有人能帮我完成下面的代码示例吗 for (int newCol = 0; newCol <= MaxCols; newCol++) { for (int newRow = 0; newRow <= MaxRows / MaxCols; newRow++) { if (folderIndex >= DirectoryArrayList.Count) { break; } var folder = DirectoryArrayList

有人能帮我完成下面的代码示例吗

for (int newCol = 0; newCol <= MaxCols; newCol++)
{
    for (int newRow = 0; newRow <= MaxRows / MaxCols; newRow++)
    {
        if (folderIndex >= DirectoryArrayList.Count) { break; }
        var folder = DirectoryArrayList[folderIndex];
        var label = new Label()
        {
            Text = folder.Name,
            FontSize = 12,
            VerticalTextAlignment = TextAlignment.Center,
            HorizontalTextAlignment = TextAlignment.Center
        };
        var GridBox = new BoxView() { BackgroundColor = Color.FromHex("#1ceaea") };
        var GridImage = new Image() { Source = "folder.png", StyleId= "Image"};
        var GridTap = new TapGestureRecognizer();
        GridTap.Tapped += async (sender, e) =>
        {
            string selectedFolder = MainFolder + folder.Name; // Will normally be a propertie stored in an array.
            if (Directory.Exists(selectedFolder))
            {
                //lstProperties.ItemsSource = selectedFolder; // Actual output purpose...
                await DisplayAlert("Folder", selectedFolder, "OK").ConfigureAwait(false); // Debug purposes...
                Console.WriteLine(selectedFolder); // Debug purposes...
            };
        };
        GridImage.GestureRecognizers.Add(GridTap);
        GridFolders.Children.Add(GridBox, newCol, newRow);
        GridFolders.Children.Add(GridImage, newCol, newRow);
        GridFolders.Children.Add(label, newCol, newRow);
        folderIndex += 1;
    }
}
for(int-newCol=0;newCol
{
string selectedFolder=MainFolder+folder.Name;//通常是存储在数组中的属性。
if(Directory.Exists(selectedFolder))
{
//lstProperties.ItemsSource=selectedFolder;//实际输出目的。。。
等待显示警报(“文件夹”,选择文件夹,“确定”)。配置等待(错误);//调试目的。。。
Console.WriteLine(selectedFolder);//调试目的。。。
};
};
GridImage.GestureRecognitors.Add(GridTap);
GridFolders.Children.Add(GridBox、newCol、newRow);
GridFolders.Children.Add(GridImage、newCol、newRow);
GridFolders.Children.Add(label、newCol、newRow);
folderIndex+=1;
}
}
我已经创建了一个GridTap变量,当用户单击特定的GridImage时,该变量应该对点击手势做出反应,但由于某些原因,它不起作用!我假设每个映像没有唯一的名称/Id可能会有问题,但我找不到一种方法来暗示它


一般的想法是让一个网格元素有一个点击事件,网格元素类似的文件夹将被打开,但这是迄今为止我发现的唯一一种稍微类似于我想做的事情的方法,因为你要在同一行和同一列中添加3个不同的布局,位于顶部的元素将抓住你的手势eRecognizer,我建议您将所有内容包装到一个布局中,将GR传递到该布局,然后将其添加到您的GridFolders中,如下所示:

var GridTap = new TapGestureRecognizer();
GridTap.Tapped += async (sender, e) =>
{
    ...
};
StackLayout LayoutToReceiveTheGesture = new StackLayout();
StackLayout.GestureRecognizers.Add(GridTap);
StackLayout.Children.Add(GridBox);
StackLayout.Children.Add(GridImage);
StackLayout.Children.Add(label);
GridFolders.Children.Add(GridBox, newCol, newRow);

您将向每个单元格添加三个元素,因此只有“top”元素(最后添加的元素)将响应手势。尝试在图像之前添加标签。如果运气不好,标签位于图像之后,仍然不会发生单击事件!即使我只添加GridImage,它也不会对单击事件做出反应。您如何测试?您是在使用调试程序,还是只是在观察应用程序的行为?我还将尝试使用与之相反的处理程序对于匿名委托人,您是否使用调试器中的断点来测试此问题?如果不是,您只是基于观察进行测试,那么可能不是手势识别器才是问题所在。Hi,我已准备好使用您的代码示例来实现此目标,只需稍作更改…'var Layout=new StackLayout();//Layout.Children.Add(GridBox);Layout.Children.Add(GridImage);Layout.Children.Add(标签);Layout.gestureRecognitors.Add(GridTap);GridFolders.Children.Add(Layout,newCol,newRow);“谢谢你的指导:-)现在又有一个问题被揭露出来了,它位于网格布局中的某个位置。@Mark yes我已经添加了编辑,我注意到我在堆栈布局中包含了行和列,如果它工作了,然后标记为正确的anwser,可能是一个upvote:)dam我的时间:-)好的,发现了另一个问题,在xmal中,我在堆栈布局的网格中有一个网格,这就是为什么我只能从第一列中获得一个单击事件的原因…仍在工作,再次感谢大家对我学习过程的支持:-)