我有一个显示搜索结果列表的 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 中的代码并直接调用它,结果也相同。
因此,它正确选择了行,但列表视图没有获得焦点,而如果我单击按钮,它会获得焦点。而且,如果我将另一个控件设置为具有焦点,那就可以了,而不是这个列表视图。