1

我的用户控件有带有图像作为 ListboxItems 的列表框,当我使用“箭头键”导航列表框项目(图像)时,我遇到了一个问题,我无法导航下一行中存在的项目,例如,列表框包含图像行* “我使用过 WrapPanel”) *,如果我使用右箭头键导航图像,我无法移动到下一行,

<ListBox.ItemContainerStyle>
   <Style TargetType="{x:Type ListBoxItem}">
   <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
   <Setter Property="IsTabStop" Value="True" />
   </Style>
</ListBox.ItemContainerStyle>
4

1 回答 1

2

基于这个几乎有效但不完全有效的答案。

在您的 ListBox 上放置一个KeyDown事件,并ItemsCollection在您看到 Right 或 Left 按键时使用它来选择下一个或上一个元素。

这会移动选择,但不会移动键盘焦点(虚线),因此您还必须调用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 ) );
    }
}

最后,确保您IsSynchronizedWithCurrentItem="True"的 ListBox 上有。

这将为您提供所需的环绕行为。

于 2013-08-26T17:52:17.903 回答