Как оставить фокус ScrollViewer с помощью навигации по клавиатуре в WPF - PullRequest
0 голосов
/ 17 мая 2019

У меня проблема с клавиатурной навигацией и ScrollViewer. Это моя установка:

<DockPanel>
    <Button DockPanel.Dock="Top" Content="Add" />
    <Button DockPanel.Dock="Top" Content="Clear" />
    <ItemsControl DockPanel.Dock="Top" Focusable="False" 
                  ScrollViewer.CanContentScroll="True"
                  ItemsSource="{Binding ItemsList}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <CheckBox Content="{Binding Item.Name}" 
                          IsChecked="{Binding Selected}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.Template>
            <ControlTemplate>
                <ScrollViewer Focusable="False">
                    <ItemsPresenter />
                </ScrollViewer>
            </ControlTemplate>
        </ItemsControl.Template>
    </ItemsControl>
</DockPanel>

Перемещение фокуса с помощью клавиш со стрелками вверх и вниз работает нормально, пока фокус не войдет в мое ItemsControls. Тогда я могу только перемещать фокус внутри него. Например, если я доберусь до верхнего элемента ItemsControls, я бы ожидал, что фокус переместится обратно к моей кнопке «Очистить», но это не так, он застрял внутри ItemsControl. Я пробовал различные варианты KeyboardNavigation.DirectionalNavigation, но ничего не работает.

Удаление ScrollViewer исправляет навигацию, но это, очевидно, нежизнеспособно, поскольку мне нужно отобразить больше элементов, которые соответствуют экрану.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...