読者です 読者をやめる 読者になる 読者になる

ikarosの作業場

C#でWindows Store Appsやったり、Phunいじったり

リファレンス:マウス・タッチに関するイベントハンドラ(WindowsStoreApps用)

タップやクリックなどのインプット系のイベントハンドラについてのリファンレス

Tapped系は以下のイベントハンドラがあります
・Tapped
 一回短くタッチ、もしくはマウスクリックされたときに処理を開始
・DoubleTapped
 二回短く小刻みにタッチ、もしくはダブルクリックされたときに処理を開始します
 このイベントが発動した場合Tappedイベントは無視されます
・RightTapped
 スタイラスペン等の右タップボタンが押されたり、右クリックされたときに処理を開始します
・Holding
 長押しタッチがされた際に処理を開始します。マウス操作では処理は開始されません。
 また長押し中とタッチを離した後、計二回処理が開始されます。

C#上の表記は以下の通りです

//Tapped
void TappedEvent(object sender, TappedRoutedEventArgs e)
{
     //処理を書く
}

//DoubleTapped
void DoubleTappedEvent(object sender, DoubleTappedRoutedEventArgs e)
{
     //処理を書く
}

//RightTapped
void RightTappedEvent(object sender, RightTappedRoutedEventArgs e)
{
     //処理を書く
}

//Holding
void HoldingEvent(object sender, HoldingRoutedEventArgs e)
{
     //処理を書く
}
  • Click系(Buttonコントロール等の一部コントロールのみ)

Click系はClickのみしかありません
・Click
 クリックされた際に処理を開始します。タッチされても処理を開始します

void ClickEvent(object sender, RoutedEventArgs e)
{
     //処理を書く
}

・Manipulation系
コントロールに何かしらタッチやクリック操作によって移動・回転・拡大縮小量(以下運動量と書きます)が発生したときに処理を開始します 運用法は前回の記事UIElementsをタッチ操作をする(Windows UI/Windows Store Apps向け) - ikarosの作業場をご覧ください

Manipulation系には以下のイベントハンドラがあります
・ManipulationStarting
 運動量が発生したことを感知したときに処理を開始します。
 実質的にはコントロールがタップされたりドラッグされ始めたときに処理が開始されます
・ManipulationStarted
 運動量が発生し何らかの処理を始めた時に発動します。
 実質はStartingより後、Deltaより前に処理を開始します
・ManipulationDelta
 運動量の変化を感知した時に処理を開始します
・ManipulationInertiaStarting
 コントロールに対するドラッグが終わり、慣性による運動の処理が必要になったと感知した時に処理を開始します。
・ManipulationCompleted
 すべての運動量が0になったことを感知した時に処理を開始します

C#での表記は以下の通り

//ManipulationStarting
void ManipulationStartingEvent(object sender, ManipulationStartingRoutedEventArgs e)
{
     //処理を書く
}
//ManipulationStarted
void ManipulationStartedEvent(object sender, ManipulationStartedRoutedEventArgs e)
{
     //処理を書く
}
//ManipulationDelta
void ManipulationDeltaEvent(object sender, ManipulationDeltaRoutedEventArgs e)
{
     //処理を書く
}
//ManipulationInertiaStarting
void ManipulationInertiaStartingEvent(object sender, ManipulationInertiaStartingRoutedEventArgs e)
{
     //処理を書く
}

また各運動量の変化量ですが
それぞれ変数eの中の

・e.Cumulative
コントロールが生成されてから変化した運動量全てを加算したものが入っています
・e.Delta
Deltaイベントを感知してから処理を実行するまでの各運動量が入っています
・e.Position
操作の起点となる座標が入っています
・e.Velocity
現在の運動量の変化率を求めます

さらにその中に
・X,Y(Transition.X,Y)
各コントロールのX,Y座標が入っています
・Scale
元のコントロールからの拡大・縮小倍率を表します
ただし2倍の時は1.0、3倍の時は2.0といったように(倍率-1)が値として返されます
・Rotation
回転量が入っています。ただし弧度法(ラジアン)ではなく度数法(360度で一周)が用いられます

具体的にDeltaイベント間のコントロールのx座標移動量を求める時は

private TranslateTransform _translation;
_translation.x = e.Delta.Transition.X

というように使います

  • Pointer系

マウス動作の代わりになるイベントとしてポインター系のイベントハンドラが追加されました

・PointerCanceled
ポインターがコントロールからアプリが想定外の異常なフォーカス(主にコントロール上にポインターを載せている状態)が外れた場合に発動します。あんまり使いません。
異常なフォーカスの外れ方の例として解像度が変更された場合などが挙げられます
・PointerCaptureLost
コントロール上にいったんフォーカスがあった状態からほかのコントロールにフォーカスが移った際に発動します。
・PointerEntered
コントロールがフォーカスを得た時に発動します。
・PointerExited
コントロールがフォーカスを失ったときに発動します。
・PointerMoved
コントロール上でポインターが動いたときに発動します。
・PointerPressed
コントロール上でポインターがクリック・タッチを行ったときその瞬間に発動します
・PointerReleased
コントロール上でクリック・タッチ状態が終わった瞬間に発動します。

void PointerCanceledEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}
void PointerCaptureLostEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}
void PointerEnteredEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}
void PointerExitedEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}
void PointerMovedEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}
void PointerPressedEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}
void PointerReleasedEvent(object sender, PointerRoutedEvent e)
{
     //処理を書く
}

また PointerRoutedEvent eからPointerに関する情報を得ることもできます

当サイトのソースコード及びその他の情報は個人・商用問わず自由に使っていただいてかかまいませんが、当サイトの情報が元で発生したいかなる結果・不利益については責任を負いかねますのでご了承ください