проблема программного добавления tapGesture - PullRequest
0 голосов
/ 09 марта 2020

Может кто-нибудь помочь мне с приведенным ниже примером кода, над которым я работаю?

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;
    }
}

Я создал переменную GridTap, которая должна реагировать на жест касания, когда пользователь нажимает на этот конкретный GridImage, для некоторых причина это не работает! Я предполагаю, что это может быть проблема с каждым изображением, не имеющим уникального имени / идентификатора, но я не могу найти способ задействовать его.

Общая идея состоит в том, чтобы иметь элемент сетки, который имеет событие click и папка, на которую похож элемент сетки, будет открыта, но это единственный найденный мной способ, который немного напоминает то, что я хочу сделать

1 Ответ

1 голос
/ 09 марта 2020

Поскольку вы добавляете 3 разных макета в одну строку и столбец, элемент, который будет сверху, будет захватывать ваш GestureRecognizer, я предлагаю вам обернуть все в макет, передать 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...