子としていくつかのキャンバス要素を持つグリッドで構成されるカスタムコントロールを実装しようとしています。グリッドでスワイプアクションが実行されると、キャンバス要素でいくつかの操作を実行することを目的としています。グリッドのスワイプを処理できません。msdnに同じものを投稿しました -win8Devフォーラム
3 に答える
これがどのように行われたかについてのサンプルがなかったので、私はあなたたちと同じボートにいましたが、C#を使用してWindows 8ストアアプリでスワイプジェスチャがどのように実装されるかについてMSDNドキュメントを熟読し、精査した後、これは何ですか私は思いついた(そしてそれは上/下/左/右にスワイプする必要がある私のアプリで動作します):
まず、GestureRecognizerの代わりに、操作イベントを使用する必要があるため、スワイプを処理するグリッド上で(たとえば、画面全体を取得してジェスチャを解釈するように設定するとします)、続く:
グリッドスワイプサーフェスと呼び、Y軸とX軸の両方の操作モードを処理しています。
swipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;
次に、通知したい操作イベントを配線します。私の場合は、操作が開始され、いつ終了したかを知りたいだけです。
swipingSurface.ManipulationStarted += OnManipulationStarted;
swipingSurface.ManipulationCompleted += OnManipulationCompleted;
必要に応じて初期点を取得するなど、操作を開始するときに必要なことをすべて実行します。ただし、実際のトリックはManipulationCompletedイベントにあります。このイベントでは、次のように、ジェスチャーの結果として速度を取得する必要があります。
public void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e) {
var velocities = e.Velocities;
}
ManipulationCompletedEventArgs Velocitiesプロパティは、タイプManipulationVelocitiesの構造体を返します。これには、次の内部に他のプロパティが含まれています。
-角速度:ミリ秒あたりの度数で表した回転速度。
-拡張:拡張、またはスケーリング、ミリ秒あたりのDIP単位の速度。
-線形:ミリ秒あたりのDIP単位の直線速度。
私は実際に線形速度を見ています。これは、ジェスチャが実行された方向を示すX値とY値を含むポイントです。たとえば、スワイプが上向きの場合はY値が正であり、下向きの場合はY値が負であることがわかります。X値についても同様です。左にスワイプすると、X値が負になり、右にスワイプするとX値が正になるので、これらの値を試して、スワイプの方向や最終的なポイントなどを確認できます。 。
お役に立てれば。
スワイプ可能なコントロールでManipulationModeを設定し、Manipulation〜イベントを処理してみてください。一部のコントロールはUIイベントのバブリングを停止する可能性があるため、コントロールをButtonまたはScrollViewer内に配置すると、イベントが機能しない場合があることに注意してください。
SwipeHintThemeAnimation
を使用GestureRecognizer
してRectangleコントロールに接続したり、Gridコントロールを使用するように変更したりすることができます。ドキュメントを参照してください。