イベントシステムは、オペレーティングシステムまたはスクリプトから発生するイベントをリッスンし、EventDispatcher を使用してそれらのイベントをビジュアル要素にディスパッチします。イベントディスパッチャーは、送信する各イベントに適切なディスパッチ方法を決定します。方法を決定すると、ディスパッチャーは決定した方法を実行します。
ビジュアル要素は、いくつかのイベントに対してデフォルトの動作を実装します。これには、追加のイベントの作成と実行が含まれます。例えば、PointerMoveEvent は追加の PointerEnterEvent と PointerLeaveEvent を生成できます。これらの追加イベントはキューに入れられ、現在のイベントが完了した後に処理されます。例えば、PointerMoveEvent は PointerEnterEvent イベントと PointerLeaveEvent イベントの前に処理を終了します。
各イベントタイプには独自のディスパッチ動作があります。各イベントタイプの動作は、2 つの段階に分かれます。
各イベントタイプのディスパッチ動作のリストについては、イベントリファレンスページを参照してください。
イベントターゲットを選択すると、イベントディスパッチャーはイベントの伝播経路を計算します。伝播経路は、イベントを受け取るビジュアル要素が順序通りに並べられたリストです。伝播経路は次の順序で発生します。
ほとんどのイベントタイプは、伝播経路上のすべての要素に送信されます。いくつかのイベントタイプはバブルアップの段階をスキップし、いくつかのイベントタイプはイベントターゲットのみに送信されます。
要素を非表示または無効にするとその要素はイベントを受け取りません。要素を非表示または無効にしても要素の先祖や子孫にイベントが伝播されます。
あるイベントが伝播経路をたどると、Event.currentTarget はそのイベントを処理する要素に更新されます。イベントのコールバック関数の中には、ディスパッチの動作を記録する 2 つのプロパティがあります。
EventBase.currentTarget は、コールバックが登録されたビジュアル要素です。EventBase.target は、イベントが発生する要素 (例: ポインター直下の要素) です。イベントのターゲットは、イベントの種類によって異なります。ポインターイベントの場合、ターゲットは通常、ポインターの直下にある選択される可能性が最も高い要素です。キーボードイベントの場合、ターゲットは現在フォーカスされている要素です。
UI Toolkit のイベントには target プロパティがあり、これにはイベントが発生した要素への参照が含まれます。オペレーティングシステムから発生するほとんどのイベントでは、ディスパッチプロセスが自動的にイベントターゲットを見つけます。
ターゲット要素は EventBase.target に格納されており、ディスパッチプロセス中は変更されません。プロパティ Event.currentTarget は、現在イベントを処理しているビジュアル要素に更新されます。
ほとんどのポインターイベントは、選択モードを使用してターゲットを決定します。VisualElement クラスには、以下の値をサポートする pickingMode プロパティがあります。
PickingMode.Position (デフォルト): 位置の矩形に基づいて選択します。PickingMode.Ignore: ポインターイベントの結果として選択できないようにします。
VisualElement.ContainsPoint() メソッドをオーバーライドして、カスタム交差ロジックを実行できます。