【问题标题】:Starting Keyboard Navigation from SelectedItem in a ListView (WPF)从 ListView (WPF) 中的 SelectedItem 启动键盘导航
【发布时间】:2013-09-06 11:15:40
【问题描述】:

我正在开发 WPF ListView,我想使用现在实际上工作正常的键盘导航。问题如下:

  1. 我在 ListBox 上听 SelectionChanged
  2. 在事件处理程序中,我将选定的项目显示在视图中(效果很好)
  3. 当我启动键盘导航时,它从列表顶部开始,而不是从 SelectedItem(这是我不想要的东西)。

所以现在的问题是:如何从 SelectedItem 而不是第一个 Item 开始键盘导航(向上和向下箭头)?

这是我的事件处理程序的样子:

protected void ListSelectionChanged
 ( Object sender
 , SelectionChangedEventArgs args )
 {
  var enumerator = args.AddedItems.GetEnumerator( );

  if ( enumerator.MoveNext( ) )
   ( sender as ListView ).ScrollIntoView( enumerator.Current );
 }

提前谢谢!

【问题讨论】:

  • 尝试在ListSelectionChanged 事件处理程序中将焦点设置到您的selectedItem。我认为键盘导航是关于焦点而不是选择。

标签: c# wpf listview navigation keyboard


【解决方案1】:

我认为@Bolu 已经正确回答了您的问题。问题与项目的Focus 有关,而不是与选择有关。当您更改 SelectedItem 时,请尝试在之后添加此行:

item.Focus();

【讨论】:

  • 谢谢,致电Focus() 是正确的做法。无论如何,我在让项目调用 Focus on 时遇到了一些问题。第一个原因是:还没有。第二个是:它不在视线范围内,因此虚拟化没有创建它。为了解决这个问题,我必须先ScrollIntoView(value) 然后听ItemsContainerGenerator.StatusChanged 来创建项目。最后我可以节省地调用焦点,一切都很好。
  • 为了将来参考,here's 另一种方法。这个问题的答案就是这个问题的完整代码。
猜你喜欢
  • 2011-01-17
  • 2011-09-05
  • 2017-08-20
  • 2012-10-29
  • 2011-04-25
  • 1970-01-01
  • 2012-01-01
  • 2011-06-06
  • 1970-01-01
相关资源
最近更新 更多