如何在WPF中设置Listview以响应Enter和MouseClick

本文关键字:响应 Enter MouseClick Listview 设置 WPF | 更新日期: 2023-09-27 18:28:40

我有一个WPF列表视图,在XAML中使用"SelectionChanged"进行选择。我的支持代码是C#。该应用程序运行良好。我还想在高亮显示特定行时按Enter键进行选择,以获得与鼠标单击该条目相同的结果。

我试着在XAML中设置一个KeyUp事件,并在后台代码中检查e.Key何时为"Return",就目前而言,这也很好。问题是,当我按下Enter键时,我看不到我在列表视图中的哪一行:SelectedIndex是-1,SelectedItem是null,所以显然没有选择;所有这些都表明,当我按下Enter键时,我在列表视图中。

有人能教我怎么做吗?我对WPF还比较陌生,所以请在回复中具体说明。

如何在WPF中设置Listview以响应Enter和MouseClick

SelectedIndex直接链接到SelectionChanged事件,并且只有在选择项目时才会更改。

应该使用类似ListViewItemMouseHoverEvent的方法来获取enterKeyUp事件的索引。

YourListViewItemType item;
private void ListView1_ItemMouseHover(Object sender, ListViewItemMouseHoverEventArgs e) {
    item = e.Item;
}
private void Page_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if(item == null) return;
    if(e.KeyCode == Keys.Return)
    {
        // Do something with highlighted item
    }
}

像这样的东西应该可以在上运行

事实证明,使用列表视图上的上下箭头(当它处于焦点时)确实设置了SelectedIndex。不知道为什么我以前没有了解这一点,但一旦我发现了这一点后,从我的可观察集合中检索记录并解析出来就很简单了。我最终在XAML中编码了一个Keyboard.KeyUp事件,并检查事件处理程序中按下了什么键,例如,C或Enter表示更改,D或Delete表示删除,等等。

这是ListView中的一个按钮
它应该与文本块一起工作
您只需要获取DataContext

Button btn = (Button)sender;
GabeLib.SearchItem srchItem = (GabeLib.SearchItem)btn.DataContext;