2017-09-24 2 views
2

J'utilise xamarin.forms pour faire une application mais, pour une raison quelconque, après avoir changé cette page, j'ai augmenté l'image et ajouté quelques grilles, le gesturerecognizer arrêté travailler uniquement dans l'iPhone, dans Android, il fonctionne normalement ... cam quelqu'un voir le problème dans ce code? parce que, jusqu'à présent, je ne peux pas. Je crée une page par programmation en raison du modèle dont j'ai besoin.GestureRecognizer ne fonctionne pas uniquement dans ios xamarin.forms

private void CriaTela() 
    { 
     int row = 0; 
     int column = 0; 

     gridtextura.RowSpacing = 5; 
     gridtextura.ColumnSpacing = 15; 

     lstCategorias = lstCategorias.OrderBy(o => o.nome).ToList(); 

     foreach (var item in lstCategorias) 
     { 
      Grid GridContent = new Grid 
      { 
       RowSpacing = 0, 
       //BackgroundColor = Color.Pink, 
       VerticalOptions = LayoutOptions.FillAndExpand, 
       RowDefinitions = 
      { 
       new RowDefinition { Height = new GridLength(8, GridUnitType.Star) }, 
       new RowDefinition { Height = new GridLength(2, GridUnitType.Star) } 
      } 
      }; 

      var textura = new CachedImage(); 
      textura.Source = "texturaCateg"; 
      textura.HorizontalOptions = LayoutOptions.FillAndExpand; 
      textura.VerticalOptions = LayoutOptions.FillAndExpand; 
      textura.Aspect = Aspect.Fill; 

      GridContent.BindingContext = item; 

      Grid boxColorView = new Grid 
      { 
       RowSpacing = 0, 
       // BackgroundColor = Color.Pink, 
       VerticalOptions = LayoutOptions.FillAndExpand, 
       RowDefinitions = 
      { 
       new RowDefinition { Height = new GridLength(2, GridUnitType.Star) }, 
       new RowDefinition { Height = new GridLength(8, GridUnitType.Star) } 
      } 
      }; 

      boxColorView.Children.Add(new BoxView { Color = Color.FromHex(item.corFundo), VerticalOptions = LayoutOptions.FillAndExpand }, 0, 1); 
      boxColorView.Children.Add(textura, 0, 1); 

      boxColorView.Children.Add(new BoxView { VerticalOptions = LayoutOptions.FillAndExpand }, 0, 0); 
      gridtextura.Children.Add(boxColorView, column, row); 
      gridtextura.Children.Add(GridContent, column, row); 

      //Qual categoria foi escolhida? 
      var CliqueCategoria = new TapGestureRecognizer(); 

      CliqueCategoria.Tapped += (s, e) => 
      { 
       CriaLoading(); 
       var stacklayout = s as Grid; 
       categoriaEscolhida = (Categorias)stacklayout.BindingContext; 
       ChamaProdutos(); 
      }; 

      GridContent.GestureRecognizers.Add(CliqueCategoria); 
      GridContent.BackgroundColor = Color.Green; 
      if (item.imagem != null && item.imagem != "") 
      { 
       int initIndex = item.imagem.IndexOf(','); 
       string image = ""; 

       image = item.imagem.Substring(initIndex + 1); 

       try 
       { 
        GridContent.Children.Add(new CachedImage { Source = ImageSource.FromStream(() => new MemoryStream(Convert.FromBase64String(image))), VerticalOptions = LayoutOptions.FillAndExpand }, 0, 0); 
       } 
       catch (Exception e) 
       { 
        GridContent.Children.Add(new CachedImage { Source = "error.png", VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.Fill, HeightRequest = 50, WidthRequest = 50 }, 0, 0); 

       } 
      } 

      GridContent.Children.Add(new Label { Text = item.nome, TextColor = Color.FromHex(item.corTexto), FontSize = Device.GetNamedSize(NamedSize.Micro, typeof(Label)), FontAttributes = FontAttributes.Bold, HorizontalTextAlignment = TextAlignment.Center, VerticalOptions = LayoutOptions.Start, HorizontalOptions = LayoutOptions.CenterAndExpand }, 0, 1); 

      if (column == 0) 
      { 
       column = 1; 
      } 
      else 
      { 
       column = 0; 
       row++; 
      } 

     } 

    } 

modifier ------------------- ----------------

Je connais un un peu plus sur ce problème ... parce que maintenant j'ai une image qui est un bouton ... et ça fonctionnait ... mais maintenant, c'est sur l'autre image et puis ça ne marche plus ... mais c'est sur l'autre image ... c'est le même cas de ce code que j'ai posté ici ... j'ai une grille au-dessus d'autres..à la même position et largeur et longueur ... et la grille supérieure ne reçoit pas le robinet

+0

Il est possible qu'un élément enfant capture les taps et ne les laisse pas passer à la grille parente. Essayez de définir 'InputTranparent = true' sur les contrôles enfants' GridContent'. – Ada

+0

Plus de détails ici: https://developer.xamarin.com/api/property/Xamarin.Forms.VisualElement.InputTransparent/ – Ada

+0

tous les enfants devraient recevoir InputTranparent = true, non? –

Répondre

0

Le problème était en xaml ... La grille principale était à l'intérieur d'une autre grille ... cette autre grille était en train de créer le problème ... Je pense que c'était fini les clics