0

検索結果のリストを表示する ListView があります。作業を簡単にするために、F8 キーを検索ボタンに関連付けて、ユーザーがキーボードで F8 キーを押して検索を実行できるようにします。

私はこのようなことをしています:

private void UserControl_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.F8)
    {
        btnSearch.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
        lvResults.SelectedIndex = 0;
        lvResults.Focus();
    }
}

btnSearch は実際にインデックスとフォーカス自体を設定します。ユーザーがボタンをクリックする (またはタブでスペースを押す) と、フォーカスが設定されます。ここで selectedindex とフォーカスを削除すると、同じ動作が得られます (したがって、このコードは実際には再度実行されており、必要ありません)。

このコードでは、F8 キーを押すと最初の行が選択されますが、フォーカスは F8 キーを押したときのテキスト ボックスに残ります。ユーザーは上下の矢印を押して必要な結果を選択できるようにしたいため、これは望ましくありません。

注:別のコントロール (リスト ビューではない) にフォーカスを設定すると、正常に動作します。また、選択した項目を ListViewItem にキャストしようとすると、この場合は DataRowView であるため、エラーが発生します。また、btnSearch のコードを削除して直接呼び出してみましたが、これも同じ結果になります。

そのため、行を正しく選択していますが、ボタンをクリックするとリストビューがフォーカスされません。そして、別のコントロールにフォーカスを設定すると、それは機能しますが、このリストビューではありません。

4

1 に答える 1

0

これは、コードが正常に機能するテスト プロジェクトの zip です。これは、私が SO の質問を手伝おうとしているときにテストする単なるジャンク テスト プロジェクトなので、プロジェクト内の他のものは無視してください。 http://sdrv.ms/LuNKQt

また、 http://julmar.com/blog/mark/?p=52を読むことをお勧めします。これには、WPF フォーカスに関する多くの優れた情報があります。

最後に、Snoop (http://snoopwpf.codeplex.com/releases/view/73187) を使用してプログラムを監視し、何が起こっているかを正確に確認することができます。

于 2012-06-11T15:43:08.633 に答える