C# 从列表视图(WPF)中的SelectedItem启动键盘导航
我正在开发一个WPF列表视图,我想使用键盘导航,现在它实际上可以正常工作。问题如下:C# 从列表视图(WPF)中的SelectedItem启动键盘导航,c#,wpf,listview,navigation,keyboard,C#,Wpf,Listview,Navigation,Keyboard,我正在开发一个WPF列表视图,我想使用键盘导航,现在它实际上可以正常工作。问题如下: 我在列表框中收听SelectionChanged 在事件处理程序中,我将所选项目带入视图(这很好) 当我启动键盘导航时,它从列表的顶部开始,而不是从SelectedItem开始(这是我不想要的) 现在的问题是:如何从SelectedItem而不是第一项开始键盘导航(上下箭头) 下面是我的事件处理程序的外观: protected void ListSelectionChanged ( Object sender
protected void ListSelectionChanged
( Object sender
, SelectionChangedEventArgs args )
{
var enumerator = args.AddedItems.GetEnumerator( );
if ( enumerator.MoveNext( ) )
( sender as ListView ).ScrollIntoView( enumerator.Current );
}
提前谢谢 我认为@Bolu正确地回答了你的问题。问题与项目的
焦点有关,而与选择无关。更改SelectedItem
时,请尝试稍后添加此行:
item.Focus();
我认为@Bolu正确地回答了你的问题。问题与项目的焦点有关,而与选择无关。更改SelectedItem
时,请尝试稍后添加此行:
item.Focus();
在ListSelectionChanged
事件处理程序中,将焦点设置为您的selectedItem
,可能会重复。我认为键盘导航是关于焦点而不是选择。可能重复的尝试将焦点设置为ListSelectionChanged
事件处理程序中的selectedItem
。我认为键盘导航是关于焦点而不是选择。谢谢,调用focus()
是正确的选择。不管怎么说,我在获取该项目时遇到了一些问题。第一个原因是:它还没有出现。第二个问题是:它已经看不见了,所以虚拟化没有创建它。为了解决这个问题,我必须先滚动查看(值)
,然后收听项目ContainerGenerator.StatusChanged
来创建项目。最后我可以省去呼叫focus,一切都很顺利。为了将来的参考,另一种方法。该问题的答案是该问题的完整代码。谢谢,调用Focus()
是正确的做法。不管怎么说,我在获取该项目时遇到了一些问题。第一个原因是:它还没有出现。第二个问题是:它已经看不见了,所以虚拟化没有创建它。为了解决这个问题,我必须先滚动查看(值)
,然后收听项目ContainerGenerator.StatusChanged
来创建项目。最后我可以省去呼叫focus,一切都很顺利。为了将来的参考,另一种方法。这个问题的答案是这个问题的完整代码。