防止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) { } }
希望这可以帮助。