es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Evento de tap Xamarin TapGestureRecognizer disparado en toques de fondo.

Me enfrenté a un comportamiento extraño de TapGestureRecognizer. Tengo una página de Xamarin simple como se muestra a continuación.

<stacklayout>
    <path classid="BottomCone" fill="{AppThemeBinding Dark=#333333, Light=#444444}" data="{x:Static local:MainPage.BottomConeGeometry}" backgroundcolor="Red">

        <path.gesturerecognizers>
            <tapgesturerecognizer tapped="BottomConeTapped"></tapgesturerecognizer>
        </path.gesturerecognizers>
    </path>
</stacklayout>

Aunque en realidad es solo una forma cerrada simple dibujada con el elemento Path en el que tengo un controlador para el evento de toque. Y el problema es que el evento se activa cada vez que hago clic en el Path o en su fondo. ¿Es posible que no se active el evento de toque cuando el toque ocurra en el fondo del path? Y activar el evento solo en caso de que el evento de toque ocurra dentro de un elemento Path.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible que el evento de pulsación solo se active cuando la pulsación ocurre dentro del elemento de la ruta y no en su fondo. Puedes lograr esto estableciendo la propiedad InputTransparent del StackLayout en true, lo cual hará que el TapGestureRecognizer solo funcione en los elementos visibles dentro del diseño. El código actualizado se vería así:

    <stacklayout inputtransparent="True">
        <path classid="BottomCone" fill="{AppThemeBinding Dark=#333333, Light=#444444}" data="{x:Static local:MainPage.BottomConeGeometry}" backgroundcolor="Red">
            <path.gesturerecognizers>
                <tapgesturerecognizer tapped="BottomConeTapped"></tapgesturerecognizer>
            </path.gesturerecognizers>
        </path>
    </stacklayout>
    

    Establecer InputTransparent en true también hará que el fondo del StackLayout sea transparente, por lo que deberás establecer un color de fondo para el elemento de la ruta por separado si deseas que tenga un color de fondo.

Comments are closed.