web-dev-qa-db-ja.com

WinRT-XAMLでは、クリック、タップ、ポインタープレスは同義語ですか?

PointerPressed、Click、またはTappedのいずれのイベントハンドラーを作成しても問題ありませんか?IOWの場合、以下の機能に違いがあります。

<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

クリックは下位互換性のためにあり、基本的にタップと同じです。タップは、クリック、タップ、ペンプレスなどに自動的に変換される「高レベルのジェスチャー」であり、私が使用することをお勧めします。

PointerPressedは必要なものではありません。理由は次のとおりです。押し続けると、最初に「押し」たときにPointerPressedイベントが発生し、完了したらPointerReleasedが発生します。これはより低レベルであり、押した時間などの決定を行うことができます。通常、長押しは、「クリック」または「タップ」と見なしたいものではありません。定義により、タップは持続時間が短いためです。したがって、「タップ」は、「タップ」と見なされるものに対するホールドのシステムタイミングを使用してジェスチャーを変換し、クリックとペンプレスを自動的に同じイベントに昇格させるので、必要な場合に最もうまく伝えます。 PointerPressedは、インタラクションの継続時間に関係なく、ボタンが押されたとき、または指が押されたときに起動します。

http://windows8applications.codeplex.com からダウンロードできるさまざまなインタラクションを示すかなり複雑なアプリがあります。「タッチ」と呼ばれる第4章のサンプルを参照してください。

53
Jeremy Likness

ジェレミーの答えは完全に正確ではありません。 別のスレッド で、連続してクリック/タップしたときにクリックと同じように機能しないタップの問題が報告され、以下のコードで簡単に再現でき、ポインタイベントに簡単に拡張できます。

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は、通常のボタンで処理する必要があるものです。ボタンに期待されるロジックがあります。私が考えることができるものの中で

  • キーボードだけでなくマウスでも機能します
  • ボタンを押してゆっくり離しても機能します
  • ボタンから離れるようにドラッグして押すとキャンセルできます。また、前にボタンを押した後、ドラッグして再開することもできます。
  • 一度に1つのボタンに制限されるため、2つのボタンを同時にクリックしようとしても、最初に触れたボタンはクリックされません(マルチユーザー操作をサポートする元のSurface/PixelSenseとは異なります)。
  • オートメーションなどのWindowsのアクセシビリティ機能でうまく機能する可能性があります
  • それは常に機能します

サンプルコードで示されているように、繰り返しタップすると、Tappedイベントはすべてのタップに対して登録されません。これが、いくつかの基本的なジェスチャー認識ロジックがいくつかのダブルタップを認識するか、他の理由で他のすべてのタップを単に拒否するためかどうかはわかりません。シングルタッチ/ペンタップまたはマウスクリックで機能しますが、UIElementで処理できる一般的なイベントであり、タップ、ダブルタップ、右タップ(!)を区別する場合に使用できます。または任意のUI要素を保持します。

ポインタイベントは低レベルであり、フレームワークにまだ組み込まれていない、やや高度な相互作用を処理するために使用できます。先に述べたように、クリックは、ボタン上で発生するプレスとそれに伴うリリースで構成されているため、同様の相互作用をポインターイベントでモデル化できます。たとえば、それを使用して、クリックで行うことができなかった多くのUI要素を同時にマッシュしたい、ある種のWhac-A-Mole/Twisterの組み合わせタイプのゲームを実装できます。

21
Filip Skakun

ボタン(およびListView、ハイパーリンク、MenuFlyoutItem、ContentDialogなど)はクリックして使用する必要があります。タップは単なるポインタイベントであるため、キーボード、アクセスキー、またはオートメーションを使用しても呼び出されません。

5
Ben Schoepke

私はこれが古い主題であることを知っていますが、クリックタップが本質的に同じであると言ったときの勝者の答えは正しくありません。ではない。コントロールで迅速なクリックが必要な場合、TappedClickと同じ速度で応答しません。

カスタムメイドのテンキーなどの非常に特殊なシナリオで、ユーザーが '11'(同じボタンを2回タップする)などの値を入力したい場合、Tappedを使用すると、2番目に失敗することがよくあります。 charなので、「11」ではなく「1」を取得します。 Clickを使用すると、それは起こりません。

pS:私はUWPを使用しています