使用KeyUp捕获功能键时,将注意力集中在ListView上

时间:2012-06-11 14:36:21

标签: c# wpf listview focus

我有一个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没有聚焦,而如果我单击按钮则会。如果我设置另一个控件来获得焦点,那就行了,而不是这个列表视图。

1 个答案:

答案 0 :(得分:0)

这是一个测试项目的zip文件,其中你的代码工作得很好;这只是一个垃圾测试项目,当我尝试帮助解决SO问题时,我会测试它,所以忽略项目中的其他内容。 http://sdrv.ms/LuNKQt

另外,我建议阅读:http://julmar.com/blog/mark/?p=52,它有很多关于WPF焦点的好信息。

最后,您可以使用Snoop(http://snoopwpf.codeplex.com/releases/view/73187)尝试监控程序并尝试查看确切的内容。