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

这是一个测试项目的压缩包,您的代码在其中运行良好;这只是一个垃圾测试项目,当我试图帮助解决 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 回答