情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

UIElement.LostFocus イベント

2013/12/12

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

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

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

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

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

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

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

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

LostFocus と OnLostFocus

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

Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: