我的usercontrol有Listbox,图像为ListboxItems,这里我遇到一个问题,当我使用“箭头键”导航列表框项目(图像)时,我无法导航下一行中存在的项目,比如说,列表框包含图像行* (“我使用了WrapPanel”) *,如果我使用右箭头键导航图像我不能能够进入下一行,
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
<Setter Property="IsTabStop" Value="True" />
</Style>
</ListBox.ItemContainerStyle>
答案 0 :(得分:2)
基于this answer几乎有效,但不完全。
在ListBox上放置一个KeyDown
事件,当您看到右键或左键时,使用其ItemsCollection
选择下一个或上一个元素。
这会移动选择,但不会移动键盘焦点(虚线),因此您还必须在具有键盘焦点的元素上调用MoveFocus
。
private void ListBox_KeyDown( object sender, KeyEventArgs e )
{
var list = sender as ListBox;
switch( e.Key )
{
case Key.Right:
if( !list.Items.MoveCurrentToNext() ) list.Items.MoveCurrentToLast();
break;
case Key.Left:
if( !list.Items.MoveCurrentToPrevious() ) list.Items.MoveCurrentToFirst();
break;
}
e.Handled = true;
if( list.SelectedItem != null )
{
(Keyboard.FocusedElement as UIElement).MoveFocus( new TraversalRequest( FocusNavigationDirection.Next ) );
}
}
最后,请确保您的ListBox上有IsSynchronizedWithCurrentItem="True"
。
这将为您提供所需的环绕行为。