web-dev-qa-db-fra.com

Sont clic, taraudé et pointe-shirt synonyme à WinRT-XAML?

Est-il important de savoir si je crée des gestionnaires d'événements pour pointerPressed, cliquez sur ou à taper? Iow, y a-t-il une différence fonctionnelle entre les éléments suivants:

<Button x:Name="BackButton" PointerPressed="BackButton_Click"/>    
<Button x:Name="BackButton" Click="BackButton_Click"/>    
<Button x:Name="BackButton" Tapped="BackButton_Click"/>

?

33
B. Clay Shannon

Cliquez sur là pour la compatibilité en arrière et est essentiellement la même chose que taraudée. Tapé est un "geste de haut niveau" qui se traduira automatiquement en un clic, du robinet, de la pompe à stylo, etc. et c'est ce que je recommanderais d'utiliser.

Pointuerprimé n'est pas ce que vous voulez. Voici pourquoi: Si je pressais et que je tiens, l'événement pointuérimé se déclenchera lorsque j'appuie initialement "Appuyez sur", puis à PointerReleased tirer une fois que cela est fait. Ceci est plus bas de niveau et vous pouvez prendre des décisions sur la durée pendant laquelle il a été pressé, etc. typiquement une presse longue n'est pas ce que vous souhaitez considérer un "clic" ou un "tap" car par définition, le robinet est une durée plus courte. Par conséquent, pour ce que vous voulez, "Tap" le transmet mieux car il traduit le geste pour vous à l'aide de la synchronisation du système pour ce qui est considéré comme un "Tap" contre une maintien et favorise automatiquement des clics et des pentes sur le même événement. PointerPressed tirera le feu Chaque fois qu'un bouton est enfoncé ou un doigt est enfoncé quelles que soient la durée de l'interaction.

J'ai une application relativement impliquée qui démontre les différentes interactions que vous pouvez télécharger à partir de http://windows8applications.codeplex.com - juste faire référence à l'échantillon de chapitre 4 appelé "toucher".

53
Jeremy Likness

La réponse de Jeremy n'est pas entièrement exacte. Dans n autre thread Quelqu'un a signalé avoir un problème de robinets ne fonctionne pas de la même manière que des clics lorsque vous cliquez sur la succession rapide et il est facile de reproduire avec le code ci-dessous et pourrait facilement être étendu aux événements du pointeur.

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 est ce que vous devez gérer sur un bouton régulier. Il a la logique attendue d'un bouton. Parmi les choses que je peux penser sont

  • il fonctionne avec un clavier ainsi que avec une souris
  • cela fonctionne même si vous appuyez sur le bouton et que vous le relâchez lentement
  • il peut être annulé lorsque vous appuyez sur en faisant glisser le bouton et repris en faisant glisser-y après avoir appuyé précédemment sur le bouton.
  • il est limité à un seul bouton à la fois, si vous essayez de cliquer sur deux boutons ensemble - la première touche touchée ne clique pas (différente de celle de la surface/pixelsense d'origine, qui prend en charge les interactions multi-utilisateurs!)
  • cela fonctionne probablement mieux avec des choses comme l'automatisation et en tant que telles avec des fonctionnalités d'accessibilité de Windows
  • ça marche toujours

Comme démontré dans le code d'échantillon - l'événement Tapped ne s'inscrit pas pour tous les tartes si vous appuyez plusieurs fois sur. Je ne sais pas si cela est dû au fait que la logique de reconnaissance de geste sous-jacente voit des doubles robinets ou ne rejette tout simplement que tous les autres appuisant pour toute autre raison. Cela fonctionne pour des clics à tactiles/stylo simples rapides ou de souris, mais est un événement générique que vous pouvez gérer sur n'importe quel UIElement et peut être utilisé si vous souhaitez distinguer les robinets, les doubles robinets, les robinets de droite (!) ou contient des éléments d'assurance-emploi arbitraires.

Les événements du pointeur sont un niveau inférieur et vous pouvez les utiliser pour gérer des interactions légèrement plus avancées non intégrées dans le cadre. Comme je l'ai mentionné - un clic consiste en une presse et une libération accompagnée se produisant sur le bouton, une interaction similaire pourrait donc être modélisée avec des événements de pointeur. Vous pouvez, par exemple, l'utiliser pour mettre en œuvre une sorte de jeu de combinaison WHAC-A-mole/Twister de jeu où vous voudriez écraser de nombreux éléments de l'UI en même temps que vous ne pouviez pas faire avec des clics.

21
Filip Skakun

Vous devez utiliser Cliquez sur Boutons (et ListView, HyperLink, Menuflyoutitem, contentdialog, etc.). Tapé est juste un événement de pointeur, il n'est donc pas invoqué si vous utilisez un clavier ou une touche d'accès ou une automatisation.

5
Ben Schoepke

Je sais que c'est un objet ancien, mais la réponse gagnante n'est pas correcte quand elle est indiquée que Cliquez sur et Tapé sont essentiellement identiques. Ils ne sont pas. Si vous avez besoin d'un clic rapide dans un contrôle, Tapé ne répond pas à la même vitesse que click.

Dans des scénarios très spécifiques, comme dans un clavier numérique fabriqué sur mesure, si l'utilisateur souhaite saisir une valeur comme '11' (en appuyant deux fois le même bouton), lorsque vous utilisez tapé, vous manquez souvent le second Char, alors vous obtenez un "1", plutôt un "11". Avec Cliquez sur qui ne se produit pas.

ps.: j'utilise UWP

1