Навигация с помощью клавиш со стрелками ListBox + WrapPanel

я пытаюсь достичь эквивалента WinFormsListView с этимиView свойство установлено вView.List, Визуально следующее работает отлично. Имена файлов в моемListbox перейдите сверху вниз, а затем перейдите в новый столбец.

Вот'это основной XAML Iя работаю с:


    
        
            
        
    

Однако стандартная навигация по клавишам со стрелками не переносится. Если выбран последний элемент в столбце, нажатие стрелки вниз не переходит к первому элементу следующего столбца.

Я пытался справиться сKeyDown событие как это:

private void thelist_KeyDown( object sender, KeyEventArgs e ) {
    if ( object.ReferenceEquals( sender, thelist ) ) {
        if ( e.Key == Key.Down ) {
            e.Handled = true;
            thelist.Items.MoveCurrentToNext();
        }
        if ( e.Key == Key.Up ) {
            e.Handled = true;
            thelist.Items.MoveCurrentToPrevious();
        }
    }
}

Это создает желаемое поведение «последний столбец - первый в следующий столбец», но также создает странность при обработке стрелок влево и вправо. Каждый раз, когда выполняется переход от одного столбца к следующему / предыдущему с помощью стрелок вверх / вниз, однократное последующее использование клавиши со стрелкой влево или вправо перемещает выделение влево или вправо от элемента, который был выбран непосредственно перед выполнением переноса.

Предположим, список заполнен строками0001" через "0100" с 10 строк на столбец. Если я использую клавишу со стрелкой вниз, чтобы перейти от "0010" к "0011", затем нажмите клавишу со стрелкой вправо, выбор переместится на "0020"Справа от0010", Если "0011" выбран, и я использую клавишу со стрелкой вверх, чтобы переместить выделение на "0010", затем нажатие клавиш со стрелками вправо перемещает выделение на "0021" (справа от "0011"и нажатие левой клавиши со стрелкой перемещает выделение на "0001" .

Будем благодарны за любую помощь в достижении желаемого макета обтекания столбцов и навигации по клавишам со стрелками.

(Изменения перенесены в мой собственный ответ, поскольку технически это ответ.)

Ответы на вопрос(2)

Ваш ответ на вопрос