我有一个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中的代码并直接调用它,这也有相同的结果。
因此,它正确地选择了行,但是listview没有聚焦,而如果我单击按钮则会。如果我设置另一个控件来获得焦点,那就行了,而不是这个列表视图。
答案 0 :(得分:0)
这是一个测试项目的zip文件,其中你的代码工作得很好;这只是一个垃圾测试项目,当我尝试帮助解决SO问题时,我会测试它,所以忽略项目中的其他内容。 http://sdrv.ms/LuNKQt
另外,我建议阅读:http://julmar.com/blog/mark/?p=52,它有很多关于WPF焦点的好信息。
最后,您可以使用Snoop(http://snoopwpf.codeplex.com/releases/view/73187)尝试监控程序并尝试查看确切的内容。