Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

200
Views
Image TapGestureRecognizer no se activa en Xamarin

En mi aplicación Xamarin, estoy usando Tooltips Effects (siguió este artículo ).

Hay Help Icons en la página, cuando hago clic en él, aparece la información sobre herramientas y si hago clic en cualquier parte del área de Stacklayout, desaparece, lo que significa que funciona perfectamente.

Hay múltiples Help Icons , y quiero que si hago clic en cualquier ícono de ayuda, la información sobre herramientas para este ícono de ayuda solo aparezca y desaparezca los abiertos, porque ahora, se pueden abrir varias sugerencias al mismo tiempo.

Para esto, agrego un TapGestureRecognizer , que cuando alguien hace clic en el ícono de ayuda, cierra la información sobre herramientas abierta. Pero no sé por qué TapGestureRecognizer ni siquiera se activa.

.xaml

 <StackLayout x:Name="mainstacklayout"> <StackLayout.GestureRecognizers> <TapGestureRecognizer Tapped="Handle_Tapped" NumberOfTapsRequired="1" /> </StackLayout.GestureRecognizers> // Code <Image Source="drawable/help.png" WidthRequest="20" HeightRequest="20" effects:TooltipEffect.Position="Left" effects:TooltipEffect.BackgroundColor="#222222" effects:TooltipEffect.TextColor="#FFFFFF" effects:TooltipEffect.Text="Tooltip" effects:TooltipEffect.HasTooltip="True"> <Image.GestureRecognizers> <TapGestureRecognizer Tapped="Handle_Tapped" NumberOfTapsRequired="1" /> </Image.GestureRecognizers> </Image> // Code </StackLayout>

.xaml.cs

 public void Handle_Tapped(object sender, EventArgs args) { foreach (var c in mainstacklayout.Children) { if (TooltipEffect.GetHasTooltip(c)) { TooltipEffect.SetHasTooltip(c, false); TooltipEffect.SetHasTooltip(c, true); } } }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Hay múltiples íconos de ayuda, y quiero que si hago clic en cualquier ícono de ayuda, la información sobre herramientas para este ícono de ayuda solo aparezca y desaparezca los abiertos, porque ahora, se pueden abrir varias sugerencias al mismo tiempo.

De acuerdo con su descripción, ¿desea que aparezca una información sobre herramientas cuando haga clic en un icono de ayuda y luego haga clic para que desaparezca la información sobre herramientas?

Desea usar TapGestureRecognizer para lograrlo, pero ya implementó TooltipEffect ese evento de clic de llamada. Parece un problema en Xamarin, se pueden encontrar más detalles aquí

Pero veo que la muestra ha implementado ITipListener , puede hacer clic en ToolTip para hacer que ToolTip desaparezca, no es necesario usar TapGestureRecognizer

 class TipListener : Java.Lang.Object, ITipListener { public void OnTipDismissed(Android.Views.View p0, int p1, bool p2) { } }

Actualizar:

Ha implementado el evento de clic xamarin.forms.view en PlatformEffect, bloquea TapGestureRecognizer. No puedo encontrar la forma de activar TapGestureRecognizer, pero encontré una solución alternativa que puede echar un vistazo.

Puede usar LongClick para hacer que aparezca ToolTip y usar Click para hacer que ToolTip desaparezca.

 protected override void OnAttached() { var control = Control ?? Container; control.LongClick += OnTap; control.Click += HideTooltip; } private void HideTooltip(object sender, EventArgs e) { var control = Control ?? Container; _toolTipsManager.FindAndDismiss(control); } protected override void OnDetached() { var control = Control ?? Container; control.LongClick -= OnTap; control.Click -= OnTap; _toolTipsManager.FindAndDismiss(control); }

Actualizar de nuevo:

Puedes ver que he agregado control.LongClick += OnTap; y control.Click += HideTooltip; en el método OnAttached, es lo mismo que LongPressedCommand , el artículo que proporcionó, su objetivo final es agregar longclick.

 [assembly: ResolutionGroupName("CrossGeeks")] [assembly: ExportEffect(typeof(DroidTooltipEffect), nameof(TooltipEffect))] namespace ToolTipSample.Droid.Effects { public class DroidTooltipEffect : PlatformEffect { ToolTip toolTipView; ToolTipsManager _toolTipsManager; ITipListener listener; public DroidTooltipEffect() { listener = new TipListener(); _toolTipsManager = new ToolTipsManager(listener); } void OnTap(object sender, EventArgs e) { var control = Control ?? Container; var text = TooltipEffect.GetText(Element); if (!string.IsNullOrEmpty(text)) { ToolTip.Builder builder; var parentContent = control.RootView; var position = TooltipEffect.GetPosition(Element); switch (position) { case TooltipPosition.Top: builder = new ToolTip.Builder(control.Context, control, parentContent as ViewGroup, text.PadRight(80, ' '), ToolTip.PositionAbove); break; case TooltipPosition.Left: builder = new ToolTip.Builder(control.Context, control, parentContent as ViewGroup, text.PadRight(80, ' '), ToolTip.PositionLeftTo); break; case TooltipPosition.Right: builder = new ToolTip.Builder(control.Context, control, parentContent as ViewGroup, text.PadRight(80, ' '), ToolTip.PositionRightTo); break; default: builder = new ToolTip.Builder(control.Context, control, parentContent as ViewGroup, text.PadRight(80, ' '), ToolTip.PositionBelow); break; } builder.SetAlign(ToolTip.AlignLeft); builder.SetBackgroundColor(TooltipEffect.GetBackgroundColor(Element).ToAndroid()); builder.SetTextColor(TooltipEffect.GetTextColor(Element).ToAndroid()); toolTipView = builder.Build(); _toolTipsManager?.Show(toolTipView); } } protected override void OnAttached() { var control = Control ?? Container; control.LongClick += OnTap; control.Click += HideTooltip; } private void HideTooltip(object sender, EventArgs e) { var control = Control ?? Container; _toolTipsManager.FindAndDismiss(control); } protected override void OnDetached() { var control = Control ?? Container; control.LongClick -= OnTap; control.Click -= OnTap; _toolTipsManager.FindAndDismiss(control); } class TipListener : Java.Lang.Object, ITipListener { public void OnTipDismissed(Android.Views.View p0, int p1, bool p2) { } } } }
over 4 years ago · Santiago Trujillo Report

0

  1. La primera prueba es cambiar el XAML donde declaras cada imagen,

a effects:TooltipEffect.HasTooltip="False" :

 <Image Source="drawable/help.png" ... effects:TooltipEffect.HasTooltip="False">

Si es así, ¿funciona el reconocedor? Si es así, entonces estás a mitad de camino.

Haz eso en la declaración de cada imagen. Esto debería "deshabilitar" toda la información sobre herramientas.

2. Utilice TapGestureRecognizer para activar uno (y desactivar los demás):

 public void Handle_Tapped(object sender, EventArgs args) { foreach (var c in mainstacklayout.Children) { // Turn off any that are on. if (TooltipEffect.GetHasTooltip(c)) { TooltipEffect.SetHasTooltip(c, false); } } // Turn on the desired tooltip. if (sender is View activeView) { TooltipEffect.SetHasTooltip(activeView, true); // TODO: TooltipEffect source needs this method added; // it has to find the effect for activeView, and call its `OnTap` method. //TODO TooltipEffect.OnTap(activeView); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!