防止XAML / C#中的ListView的返回(回车),向上和向下箭头键的默认行为(Windows 10)

当列表视图具有焦点时,按下回车键的默认行为是选择列表视图的第一个元素,向上和向下箭头键滚动列表视图。 我试图阻止这种默认行为并挂钩我的自定义逻辑。

我可以使用KeyDown为列表视图实现Access键,如下所示:

代码背后的方法:

CoreWindow.GetForCurrentThread().KeyDown += KeyDownHandler; 

MVVM方法:

  

触发Keydown属性:

    

并使用行为将列表视图的滚动条滚动到所选索引:

  

当列表视图没有焦点时,上面的处理程序会被触发。 当listview具有焦点时,箭头up,down和Enter键的默认行为将被触发,而不是我的附加行为。 有没有办法防止默认行为?

考虑扩展ListView控件并覆盖OnKeyDown处理程序。

 public class ExtendedListView : ListView { protected override void OnKeyDown(KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Enter || e.Key == VirtualKey.Up || e.Key == VirtualKey.Down) { return; } base.OnKeyDown(e); } } 

试试这个

 CoreWindow.GetForCurrentThread().KeyDown += new KeyEventHandler(ListView_KeyDown); private void ListView_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) //do ur stuff } 

使用PreviewKeyDown事件而不是KeyDown是一种更好的方法

Enter键是一个所谓的VirtualKey (单击链接以查看MSDN文档)。 这应该完成:

  private void UIElement_OnKeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Enter) { } } 

希望这可以帮助。