エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

UIElement.GotFocus イベント

2013/12/12

UIElement がフォーカスを受け取ったときに発生します。

Namespace:  System.Windows
アセンブリ:  System.Windows (System.Windows.dll 内)
XAML の XMLNS: xmlns にマップされていません。

public event RoutedEventHandler GotFocus
<uiElement GotFocus="eventhandler"/>

GotFocus イベントはバブル イベントです。これは、オブジェクト ツリーの親子関係によって関連付けられたオブジェクトのシーケンス用に複数の GotFocus イベント ハンドラーが登録されている場合、その親子関係の各オブジェクトによってイベントが受け取られることを意味します。イベントは、そのイベントを開始する入力条件を直接受け取るオブジェクトから発生し、一連の各親オブジェクトに通知 (バブル) されます。"バブル" とは、イベントが、入力条件を直接受け取るオブジェクトから始まり、オブジェクト ツリーを順に上っていくようすを表しています。バブル イベントの場合、イベント ハンドラーに使用できる sender は、イベントが処理されるオブジェクトを識別します。そのオブジェクトは、イベントを開始する入力条件を実際に受け取ったオブジェクトであるとは限りません。イベントを開始したオブジェクトを見つけるには、イベントの RoutedEventArgs イベント データの OriginalSource 値を使用します。

GotFocus イベントまたは LostFocus イベントを処理しても、イベント データ クラスで Handled プロパティは設定されず、イベントは引き続きオブジェクト ツリーを上方にルーティングし、すべてのハンドラーを起動します。これは、オブジェクト ツリーのさまざまなレベルでフォーカスを処理する場合、アプリケーションでフォーカス イベントを処理する方法として適切とは限りません。次の方法のいずれかを使用できます。

  • ブール型のフラグを使用して、フォーカス設定状態を記録します。イベントを適切に処理した特定のハンドラー呼び出しから、独自の "Handled" 変数を true に設定します。他のハンドラーでこの "Handled" 変数を確認して、別のハンドラーが既に動作しているかどうかを判断します。動作している場合は、処理を行わないでください。オブジェクト ツリーのルートでは、"Handled" を false に戻して次のフォーカス イベントの状態をリセットするためにフォーカス イベントを処理します。

  • sender およびイベント データ内の OriginalSource によってハンドラーに送信されるオブジェクト値の確認または使用に特に重点を置きます。senderOriginalSource の場合、または (同じフォーカス イベント ハンドラーが複数のオブジェクトにアタッチされているか、同様の論理的な操作のときに) sender が特定の名前付きオブジェクトの場合のみアクションを実行できます。

ただし、オブジェクトの複合ツリーのどこかにフォーカスがあるということを知ることが、コントロール全体の表示状態を正しく設定するうえで重要になる場合もあります。一般に、フォーカス イベントのルーティングを途中で抑制する場合には注意が必要です。

オブジェクトで Focus を呼び出しても、そのオブジェクトに既にフォーカスが設定されている場合、GotFocus は発生しません。

Windows Phone フォーカス システムの設計上、GotFocus は実際のフォーカスの移動とは非同期的に発生します。同期的なフォーカスの値を取得するには、FocusManager を使用します。

メモメモ:

UI の観点からは 1 つに見えるフォーカス イベントに対して、GotFocus が 2 回発生する場合があります。これは、フォーカスがまだコンテンツ領域に入っていないときに、ユーザーがコンテンツ領域内の特定のコントロールをタップすると発生する可能性があります。そのような状況では、多くの場合、その特定のコントロールで GotFocus が発生します (また、そのコントロールが OriginalSource として報告されます)。また、コンテンツ領域全体に最初のフォーカスが置かれた場合も、GotFocus が発生します。この場合、フォーカス可能なオブジェクトが見つかるまでオブジェクト ツリーがたどられ、そのオブジェクトがイベントの OriginalSource として報告されます。これは、バブル動作を慎重に追跡しながら GotFocus を処理している場合には、問題となります。OriginalSource をチェックしてください。これは多くの場合、ハンドラーでこの状況を識別するのに役立ちます。

GotFocus と OnGotFocus

GotFocus を継承するコントロールは、OnGotFocus メソッドをオーバーライドして、すべてのインスタンスのハンドラーとしてイベントを処理できます。このイベントを直接処理する場合と同様に、Handled プロパティは使用できないため、OnGotFocus の実装で、Handled の手法を使用してイベントを抑制することはできません。ただし、表示状態を設定したり、パブリック プロパティや内部状態プロパティを設定したりするために OnGotFocus を使用することはできます。詳細については、OnGotFocus を参照してください。

Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2014 Microsoft