Wpf 将键盘焦点从列表框移开
我正在用WPF(VB)开发一个只依赖键盘导航的程序 在我的程序中,我有一个列表框,可以显示多达20000个项目 我想要的是,当列表框具有键盘焦点时,我移动到可见的底部项目(使用箭头向下),我希望焦点移动到列表框外的下一个项目。我使用PgUp和PgDown滚动列表框内容,使用文本搜索跳转到项目 是否有方法检测聚焦/选定的项目是否是列表框中最后/第一个可见的项目 如果是这样,我可以使用:Wpf 将键盘焦点从列表框移开,wpf,vb.net,listbox,keyboard,focus,Wpf,Vb.net,Listbox,Keyboard,Focus,我正在用WPF(VB)开发一个只依赖键盘导航的程序 在我的程序中,我有一个列表框,可以显示多达20000个项目 我想要的是,当列表框具有键盘焦点时,我移动到可见的底部项目(使用箭头向下),我希望焦点移动到列表框外的下一个项目。我使用PgUp和PgDown滚动列表框内容,使用文本搜索跳转到项目 是否有方法检测聚焦/选定的项目是否是列表框中最后/第一个可见的项目 如果是这样,我可以使用: ListBox1.MoveFocus(New TraversalRequest(FocusNavigationD
ListBox1.MoveFocus(New TraversalRequest(FocusNavigationDirection.Down))
我建议您不要这样做,用户界面应该与操作系统中的其他用户界面保持一致
如果您能提供一个与目标操作系统上的用户界面行为一致的备用用户界面,您的用户会过得更好 您的解释有点清楚,但您要寻找的是:
<ItemsControl ItemsSource="{Binding ElementName=TheWindow, Path=ListOStrings}">
<ItemsControl.Template>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<Border BorderBrush="Magenta"
BorderThickness="1">
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
碰巧,这恰好与您描述的行为相同,因为列表中的每个项的行为几乎都像一个控件,直接作为所有其他控件的对等项放置。我使用一个简单的技巧将焦点移到列表框之外: 我禁用列表框,使焦点自动移动到下一个控件,然后再次启用列表框:)
Lst.IsEnabled = False
Lst.MoveFocus(New TraversalRequest(FocusNavigationDirection.Next))
Lst.IsEnabled = True