¿Son sinónimos Click, Tapped y PointerPressed en WinRT-XAML?


¿Importa si creo controladores de eventos para Punterpressed, Click o Tapped?IOW, ¿hay alguna diferencia funcional entre lo siguiente:

<Button x:Name="BackButton" Margin="0,3,0,0" Style="{StaticResource BackButtonStyle}" PointerPressed="BackButton_Click"/>

<Button x:Name="BackButton" Margin="0,3,0,0" Style="{StaticResource BackButtonStyle}" Click="BackButton_Click"/>

<Button x:Name="BackButton" Margin="0,3,0,0" Style="{StaticResource BackButtonStyle}" Tapped="BackButton_Click"/>

?

Author: B. Clay Shannon, 2012-11-10

3 answers

Click está ahí para la compatibilidad hacia atrás, y es esencialmente lo mismo que Tapped. Tapped es un "gesto de alto nivel" que se traducirá automáticamente a un clic, toque, prensa de pluma, etc. y es lo que recomendaría usar.

PointerPressed no es lo que quieres. He aquí por qué: si presiono y mantengo pulsado, el evento PointerPressed se disparará cuando inicialmente "presione" y luego un PointerReleased se disparará una vez que esté hecho. Esto es más de bajo nivel y puede tomar decisiones sobre cuánto tiempo fue prensado, etc. Por lo general, una pulsación larga NO es lo que desea considerar un "Clic" o un "Toque" porque, por definición, el toque es una duración más corta. Por lo tanto, para lo que desea, "Tap" lo transmite mejor porque traduce el gesto para usted utilizando el tiempo del sistema para lo que se considera un "Tap" vs.una retención y promueve automáticamente los clics y las pulsaciones de la pluma para el mismo evento. PointerPressed se activará cada vez que se pulsa un botón o se presiona un dedo, independientemente de cuánto tiempo la interacción Última.

Tengo una aplicación bastante involucrada que demuestra las diversas interacciones que puede descargar desde http://windows8applications.codeplex.com - simplemente refiérase a la muestra del Capítulo 4 llamada " Toque."

 51
Author: Jeremy Likness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-21 12:21:40

La respuesta de Jeremy no es del todo precisa. En otro hilo alguien informó tener un problema con los grifos no funcionan de la misma manera que los clics al hacer clic/tocar en rápida sucesión y es fácil de reproducir con el código a continuación y podría extenderse fácilmente a eventos de puntero.

public sealed partial class MainPage : Page
{
    private int clicks = 0;
    private int taps = 0;
    public MainPage()
    {
        this.InitializeComponent();
        var button = new Button();
        button.Width = 500;
        button.Height = 200;
        button.Content = string.Format("Clicks: {0}, Taps: {1}", clicks, taps);
        button.Click += (s, e) => button.Content = string.Format("Clicks: {0}, Taps: {1}", ++clicks, taps);
        button.Tapped += (s, e) => button.Content = string.Format("Clicks: {0}, Taps: {1}", clicks, ++taps);
        this.Content = button;
    }
}

Click es lo que debes manejar con un botón normal. Tiene la lógica que se espera de un botón. Entre las cosas que puedo pensar son

  • también funciona con un teclado como con un ratón
  • funciona incluso si presionas el botón y lo sueltas lentamente
  • se puede cancelar cuando se presiona arrastrando lejos del botón y también se puede reanudar arrastrando hacia atrás después de presionar previamente el botón
  • está limitado a un solo botón a la vez, por lo que si intenta hacer clic en dos botones juntos, el primero que toque no hará clic (¡diferente de la superficie original/PixelSense, que admite interacciones multiusuario!)
  • es probable funciona mejor con cosas como la automatización y, como tal, con las características de accesibilidad de Windows
  • siempre funciona

Como se muestra en el código de ejemplo, el evento Tapped no se registra para todos los toques si se toca repetidamente. No estoy seguro de si esto se debe a que alguna lógica de reconocimiento de gestos subyacente ve algunos toques dobles o simplemente rechaza cada otro toque por cualquier otra razón. Funciona para toques rápidos de un solo toque/lápiz o clics del ratón, pero es un evento genérico que puede manejar en cualquier UIElement y podría ser utilizado si desea distinguir entre grifos, grifos dobles, grifos derecho (!) o mantiene en elementos de interfaz de usuario arbitrarios.

Los eventos de puntero son de nivel inferior y puede usarlos para manejar interacciones un poco más avanzadas que no estén ya integradas en el framework. Como mencioné, un clic consiste en una pulsación y una liberación acompañante que ocurren en el botón, por lo que una interacción similar podría modelarse con eventos de puntero. Podría, por ejemplo, usarlo para implemente algún tipo de juego de combinación Whac-A-Mole/Twister en el que desee mezclar muchos elementos de la interfaz de usuario al mismo tiempo, lo que no podría hacer con clics.

 21
Author: Filip Skakun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:07

Debe usar los botones Click for (y ListView, Hyperlink, MenuFlyoutItem, ContentDialog, etc.). Tapped es solo un evento de puntero, por lo que no se invoca si usa un teclado, una tecla de acceso o una automatización.

 5
Author: Ben Schoepke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-03 17:26:12