Как добавить TapGestureRecognizer с помощью c # для созданных элементов из JSON? - PullRequest
0 голосов
/ 16 октября 2019

поэтому я пытаюсь десериализовать файл JSON и создать из него некоторые элементы, пока все работает хорошо. Моя проблема в том, что я хочу добавить TapGestureRecognizer к каждому созданному элементу, и я не знаю, как это сделать.


    List<Categories> categorie = JsonConvert.DeserializeObject<List<Categories>>(categoriejson);

 Device.BeginInvokeOnMainThread(() =>
    {
  foreach (Categories c in categorie)
    {
       Image image = new Image
      {
       Source = ImageSource.FromUri(new Uri(c.imageUrl))
      };

   image.HeightRequest = 105;
   CategorieLayout.Children.Add(image);

, поэтому я просто хочу добавить жест касания ккаждое созданное изображение. Я думал о проверке x: name, заданного по умолчанию для каждого изображения, но я не смог сделать это, чтобы ... любые идеи будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Если вы пытаетесь десериализовать файл JSON и создать из него некоторые элементы, я предлагаю вам использовать ScrollView для переноса содержимого. Вполне вероятно, что одна страница не будет отображаться полностью и требуется прокрутка. сделать так:

 public TestPage1()
 {
       StackLayout stackLayout = new StackLayout{};

        ScrollView scroll = new ScrollView();
        scroll.Content = stackLayout;

        foreach (Categories c in categorie) {
            var image = new Image
            {
                Source = ImageSource.FromUri(new Uri(c.imageUrl))

                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions = LayoutOptions.CenterAndExpand,
            };
            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += Image_OnTapped;
            image.ClassId = c.imageUrl;//attach data to image's `ClassId`
            image.GestureRecognizers.Add(tapGestureRecognizer);


            stackLayout.Children.Add(image);
        }

        Content = scroll;
 }

Метод Image_OnTapped

 private void Image_OnTapped(object sender, EventArgs e)
    {

      // retrieve parameter from sender's ClassId
        var parm = ((Image)sender).ClassId;


    }

Примечание:

Отправитель события Tapped будет элементом управленияк которому прикреплен распознаватель жестов. в вашем случае это изображение. Вы можете прикрепить свои данные к одному из свойств изображения, чтобы получить к нему доступ из обработчика событий.

 image.ClassId = c.imageUrl;//attach data to image's `ClassId`

И получить значение из метода Image_OnTapped следующим образом:

var parm = ((Image)sender).ClassId;
0 голосов
/ 16 октября 2019

что-то вроде этого должно работать - я делаю это из памяти, поэтому синтаксис может быть не идеальным

Image image = new Image
{
  Source = ImageSource.FromUri(new Uri(c.imageUrl))
};

var tap = new TappedGestureRecognizer();
tap.Tapped += TappedHandler;
image.GestureRecognizers.Add(tap);
...