37

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"/>

?

4

4 に答える 4

57

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

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

http://windows8applications.codeplex.comからダウンロードできるさまざまな対話を示すかなり複雑なアプリがあります。「Touch」という第 4 章のサンプルを参照してください。

于 2012-11-21T12:21:40.453 に答える
27

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

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 要素を同時にマッシュしたい、ある種のもぐらたたきとツイスターの組み合わせタイプのゲームを実装するために使用できます。

于 2014-04-01T06:33:11.567 に答える
7

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

于 2017-01-03T17:26:12.483 に答える