13

と- と 同様にとGotFocusはどう違いますか?GotKeyboardFocusLostFocusLostKeyboardFocus

簡単な質問で申し訳ありませんが、ググってたくさんのブログ投稿を読みましたが、まだ混乱しています。違いが何であるかを正確に知っている人はいないようです):

アップデート:

私の使用法:

Controlクラスを拡張してカスタム コントロールを作成しています。似ComboBoxていますが、いくつかの他の効果があります。Popupプロパティを設定してを開閉しようとしています:とイベントのIsDropDownOpenようにComboBox。ウィンドウを編集したときに閉じたくありませんが、たとえばをクリックしたり、に移動したりすると閉じます。やった:GotFocusLostFocusPopupAlt+TabButtonTextBox

private static void OnGotFocusHandler(object sender, RoutedEventArgs e) {
    if (e.Handled)
        return;
    ((SearchBox)sender).IsDropDownOpen = true;
    e.Handled = true;
}

private static void OnLostFocusHandler(object sender, RoutedEventArgs e) {
    if (e.Handled)
        return;
    ((SearchBox)sender).IsDropDownOpen = false;
    e.Handled = true;
}

GotFocus作品。しかし、Lostそうではありませんでした。ウィンドウを開いたり、非アクティブになったりすると、Lost望まないLostKeyboardFocusときにメソッドが呼び出されます。どうすれば解決できますか?Alt+TabWindow

4

1 に答える 1

17

MSDNにフォーカスの概要がありますが、ここで説明してみます。

WPF には、フォーカスに関する 2 つの概念があります。物理的なキーボード フォーカスと、論理的なフォーカスがあります。キーボード フォーカスを持つことができる要素は 1 つだけです (アプリケーションがアクティブなアプリケーションでない場合、キーボード フォーカスを持つ要素はありません)。

複数のアイテムに論理的なフォーカスを設定できます。実際、新しい「フォーカス スコープ」を作成できます。MSDN によると:

キーボード フォーカスがフォーカス スコープを離れると、フォーカスされた要素はキーボード フォーカスを失いますが、論理フォーカスは保持されます。キーボード フォーカスがフォーカス スコープに戻ると、フォーカスされた要素がキーボード フォーカスを取得します。これにより、複数のフォーカス スコープ間でキーボード フォーカスを変更できますが、フォーカス スコープにフォーカスが戻ったときに、フォーカス スコープ内のフォーカスされた要素がキーボード フォーカスを取り戻すことが保証されます。

Panelを設定することで、要素 (通常は )に独自のフォーカス スコープを定義できますFocusManager.IsFocusScope="True"。既定でフォーカス スコープである WPF のコントロールは、、、、Windowおよびです。MenuItemToolBarContextMenu

これは、アプリケーションで複数の を使用することを考える場合に理にかなっていWindowます。それらの間でAlt-Tabは、キーボードのフォーカスが最後にフォーカスを持っていたのと同じ場所に戻ることを期待してWindowいます。キーボード フォーカスと論理フォーカスを分離することで、これを実現できます。

于 2013-08-09T17:35:57.657 に答える