UIElement.PointerExited イベント

定義

ポインターがこの要素のヒット テスト領域から離れると発生します。

public:
 virtual event PointerEventHandler ^ PointerExited;
// Register
event_token PointerExited(PointerEventHandler const& handler) const;

// Revoke with event_token
void PointerExited(event_token const* cookie) const;

// Revoke with event_revoker
UIElement::PointerExited_revoker PointerExited(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerExited;
function onPointerExited(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerexited", onPointerExited);
uIElement.removeEventListener("pointerexited", onPointerExited);
- or -
uIElement.onpointerexited = onPointerExited;
Public Custom Event PointerExited As PointerEventHandler 
<uiElement PointerExited="eventhandler"/>

イベントの種類

注釈

PointerExited イベントは、最初は要素の境界領域にあったポインターに応答して発生し、その境界領域を離れる。 タッチ、マウス、ペン/スタイラスの操作は、UWP アプリでポインター入力として受信、処理、管理されます。 これらのデバイスとその相互作用は、PointerExited イベントを生成できます。 詳細については、「 ポインター入力の処理 」と、このトピックのその他の解説を参照してください。

PointerEventHandler に基づくハンドラーを使用して、このイベントを処理します。

タッチ操作や、タッチ操作の結果に発生する対話/操作イベントについては、ヒット テストで要素が表示されない場合、イベント ソースとして使用したり、操作に関連付けられたイベントを起動することはできません。 UIElement.VisibilityVisible である必要があります。 派生型の他のプロパティも、ヒット テストの可視性に影響します。 詳しくは、「イベントとルーティング イベントの概要」をご覧ください。

PointerExited では、イベントのイベント データが Handled とマークされている場合でも呼び出されるルートにイベント ハンドラーをアタッチする機能がサポートされています。 「 AddHandler」を参照してください。

特定のWindows ランタイム コントロールには、PointerExited 入力イベントに対するクラスベースの処理が含まれる場合があります。 その場合、コントロールには OnPointerExited メソッドのオーバーライドがある可能性があります。 通常、イベントはクラス ハンドラーによって処理済みとしてマークされないため、PointerExited イベントは UI のコントロールのユーザー コードで処理できます。 イベントのクラスベースの処理のしくみの詳細については、「 イベントとルーティング イベントの概要」を参照してください。

別の要素がポインターをキャプチャした場合、キャプチャされたポインターが要素の境界を離れた場合でも、PointerExited は起動しません。 ポインター キャプチャの詳細については、「 CapturePointer または マウスの操作」を参照してください。

マウスとペン/スタイラス入力用の PointerExited

マウス入力デバイスには、その時点でマウス ボタンが押されていない場合でも、マウスが移動するたびに表示される画面上のカーソルがあります。 ペン デバイス入力でも同様の動作を使用できます。入力デバイスでは、スタイラスが入力デバイスサーフェイス (IsInRange) のすぐ上にマウス ポインターを置いているが、タッチされていないことを検出できます。 したがって、マウスとペンのデバイス入力では、タッチ イベントとは少し異なるケースで PointerExited イベントが発生します。 詳しくは、「マウス操作」をご覧ください。 PointerExited イベントは、要素の最後の PointerMoved イベントが発生した 後に発生します。

タッチ入力用の PointerExited

タッチ ポイントは、指がサーフェスに触れている場合にのみ検出できます。 タッチ アクションによって PointerReleased イベントが発生するたびに、そのイベントの直後に PointerExited イベントが発生し、すべてのイベント データが 2 つのイベント (同じポインター ID、同じ位置など) に対して同じ情報になります。言い換えると、ポインターは、要素がタッチ ポイントによってタッチされる瞬間と位置に要素を入力すると見なされます。

または、タッチ ポイントは、ポインターが移動する際にサーフェスとの一定の接触が維持され、最初に要素の上にあった場合に PointerExited を生成し、要素のヒット テスト境界を終了します。 これらの種類のタッチ アクションでは、アクションをポインター イベントではなく、操作またはジェスチャとして処理することもできます。 詳細については、「 ポインター入力を処理する」を参照してください。

PointerExited のルーティング イベントの動作

PointerExited はルーティング イベントです。 ルーティング イベントの概念の詳細については、「 イベントとルーティング イベントの概要」を参照してください。 親子関係にある要素を含め、XAML UI の要素に対して複数の PointerExited イベントを定義できます。 一般的な UI コンポジションでは、子要素は親要素の境界内のどこかに存在するため、ポインターが子から外に移動したときに PointerExited イベントが最初に発生し、その後、ポインターがその親から完全に移動したときに親に対して発生します。 PointerExited イベントは、通常、子要素が起動したときに親にバブルしません。これは、入力システムが PointerExited イベントの発生を親にルーティングするのは混乱するためです。 通常は、PointerExited イベントをルーティングする必要はありません。送信者からのみ処理する必要があります。 ハンドラーで Handledtrue に設定することで、イベント ルーティングを明示的に防止できます。

まれに、親への PointerExited イベント バブルを表示できます。 たとえば、 RenderTransform を使用して子要素を親の境界外にオフセットした場合、子要素が終了すると、イベントは親にバブルし、子要素がイベントを発生させた方法によって報告されるイベント情報を提供します。

コントロールの PointerOver ビジュアル状態

コントロール テンプレートを持つコントロールは、ポインターがコントロールの境界を超えている場合にのみアクティブなビジュアル状態を適用できます。 この動作を取得または変更するために 、PointerEntered または PointerExited を常に処理する必要はありません。 場合によっては、コントロールのテンプレートを再作成する必要があります。 ビジュアル状態を呼び出す低レベルの入力処理が既にある既存のコントロールから派生している場合は、"CommonStates" VisualStateGroup で "PointerOver" という名前のビジュアル状態を指定する必要があります。組み込みのコントロール ロジックは、ポインターがコントロールの上にあるたびにそのビジュアル状態を読み込みます。 ポインターオーバーの視覚的な状態は、多くの場合、 ButtonListViewItem など、呼び出したり選択したりできるコントロールに存在します。 表示状態を呼び出す入力イベント処理が組み込まれていない Control などの基本クラスから派生している場合は、この動作を取得するために OnPointerEnteredOnPointerExited を自分でオーバーライドする必要がある場合があります。 OnPointerExited を使用して GoToState を呼び出して、"PointerOver" 状態以外の状態 ("Normal" など) を読み込みます。 詳しくは、「表示状態用にストーリーボードに設定されたアニメーション」をご覧ください。

Windows 8 の動作

Windows 8 の場合、画面上のカーソル (またはスタイラスまたはタッチポイント) が実際に移動しなかった場合、通常 、PointerEntered イベントは発生しません。 たとえば、マウスと画面上のカーソルが静止していて、PointerEntered ハンドラーを持つオブジェクトの位置が画面上のカーソルの下に移動するように翻訳または調整されている場合、PointerEntered は起動しません。 または、ポップアップやポップアップなどの要素が消え、ポインターが新しい要素の上にある場合は、 PointerEntered は起動しません (ただし、ポインターはまだ移動されていません)。 これに関連するのは、PointerExited の動作です。 たとえば、ポップアップがプログラムによって無視された場合、ポインターが無視の原因として移動しなかった場合、PointerExited は発生しません。 新しく表示された要素の上でポインターが移動しても 、PointerEntered イベントは引き続き発生しますが、それが発生するかどうかはユーザー次第であり、無視の瞬間ではなく、移動時に発生します。 つまり、アプリ UI でのポインター状態の決定に PointerEntered を発生させた最後の要素を使用しようとすると、Windows 8 では包括的ではなく、 PointerEntered と PointerExited がペアにならないシナリオが多数あります。 これは、 PointerEntered と PointerExited をトリガーとして使用するコントロールの表示状態にも影響します。

Windows 8.1以降、ポインターが一度に PointerEntered イベントを発生させた場合は、PointerExited が発生しますが、ポインターがその要素内でなくなった場合に UI 状態の変更が発生します。 これには、要素全体が消える場合が含まれます。 また、前の要素が消えたためにポインターが別の要素の上にある場合、ポインターが移動しない場合でも、その要素は PointerEntered を起動します。 プログラムによって VisibilityCollapsed に設定する要素は、UI から要素が消える可能性がある 1 つの方法であり、Windows 8.1の動作はこれに対応し、Collapsed 要素には PointerExited を、新しく表示された要素には PointerEntered を起動します。

アプリ コードを Windows 8 から Windows 8.1に移行する場合は、この動作の変更を考慮する必要があります。これは、以前に発生しなかった場合に PointerExited と PointerEntered が発生するためです。

Windows 8 用にコンパイルしたアプリは、Windows 8.1 上で実行しても Windows 8 のときと同じ動作になります。

適用対象

こちらもご覧ください