1

私のユーザーコントロールには、ListboxItems として画像を含むリストボックスがあります。ここでは、「矢印キー」を使用してリストボックス項目 (画像) をナビゲートするときに問題に直面しています。次の行にある項目をナビゲートできませんでした。たとえば、リストボックス画像の行が含まれています* ( "I have used 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

この回答に基づいて、ほとんど機能しましたが、完全ではありませんでした。

KeyDownListBox にイベントを配置し、それを使用し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 ) );
    }
}

最後に、IsSynchronizedWithCurrentItem="True"ListBox にあることを確認してください。

これにより、必要なラップアラウンド動作が得られます。

于 2013-08-26T17:52:17.903 に答える