使用键盘导航ListView,无需选择(UWP)



我注意到,当使用箭头键导航ListView时,它会将ListItem标记为选中(但不会触发任何单击(。但是,如果同时按住Ctrl+Shift键,则焦点移动而不选择项目。有没有办法让它成为默认值?或者更好的是,使状态与PointerOver中的状态匹配?我有不同的背景颜色用于选定状态和指针悬停状态,并希望鼠标的行为与键盘的行为相匹配。

此操作特定于Listview的SelectionMode属性。根据本文

单个

  1. 不带修改键:用户可以使用空格键、鼠标单击或轻触选择单个项目。用户可以取消选择项目使用向下滑动手势。

  2. 按下Ctrl键时:使用箭头键,用户可以独立于选择移动焦点。

多个

  1. 不带修改键:用户可以使用空格键、鼠标单击或轻触来切换重点项目。使用箭头键,用户可以移动焦点独立于选择

如果需要更改此默认行为,可以使用列表视图的PreviewKeyDown事件。

//代码示例

private void ListView_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
if(e.Key == VirtualKey.Down)
{
FocusManager.TryMoveFocus(FocusNavigationDirection.Down);
e.Handled = true;
}
else if (e.Key == VirtualKey.Up)
{
FocusManager.TryMoveFocus(FocusNavigationDirection.Up);
e.Handled = true;
}
else
{
e.Handled = false;
}
}

虽然Vignesh的解决方案适用于常见情况,但它不适用于某些其他情况。例如,当使用长列表上的键盘按下PageDown时,项目仍然会被选中,而不是只更改焦点。

如果你的应用程序的目标是Windows 10版本1607(周年更新(或更高版本,那么对我来说唯一有效的解决方案就是在ListView上使用SingleSelectionFollowsFocus属性。将其设置为False,SelectionMode设置为Single。

最新更新