検索結果のリストを表示する 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 のコードを削除して直接呼び出してみましたが、これも同じ結果になります。
そのため、行を正しく選択していますが、ボタンをクリックするとリストビューがフォーカスされません。そして、別のコントロールにフォーカスを設定すると、それは機能しますが、このリストビューではありません。