WPF的ScrollViewer——如何聚焦内容

ScrollViewer of WPF - How focus content

我提供了 TabControl,在 TabControl 上我有很多 TabItem,在每个 TabItem 期间我有很多 ScrollViewer,在每个 ScrollViewer 上我有 StackPanel

1) 当我尝试滚动 down/up 时,使用鼠标 -> 滚动正常

2) 当我尝试单击 StackPanel 的内容并触摸键盘的 up/down -> 滚动正常时

但是我改变了 TabControl 的 tabitem,我不能使用键盘(Up/Down),而且它不起作用。

我是否必须提供 .KeyDown+= ,并注意哪个 tabItem 处于活动状态,或者我可以在触摸 tabItem 时聚焦 tabItem 的内容?

如果我没看错你的问题,你的观点类似于

<TabControl>
    <TabItem Header="First tab">
        <ScrollViewer>
            <StackPanel Height="2000"/>
        </ScrollViewer>
    </TabItem>
    <TabItem Header="Second tab">
        <ScrollViewer>
            <StackPanel Height="2000"/>
        </ScrollViewer>
    </TabItem>
</TabControl>

并且您想在更改所选选项卡时将键盘焦点设置为 TabItem 的内容。如果是这样,一种可能的解决方案是使内容可聚焦并在所选选项卡更改时明确设置键盘焦点;也就是说,做类似

的事情
<TabControl SelectionChanged="TabControlSelectionChanged">
    <TabItem Header="First tab">
        <ScrollViewer>
            <StackPanel Height="2000" Focusable="True"/>
        </ScrollViewer>
    </TabItem>
    <TabItem Header="Second tab">
        <ScrollViewer>
            <StackPanel Height="2000" Focusable="True"/>
        </ScrollViewer>
    </TabItem>
</TabControl>

其中 TabControlSelectionChanged

给出
private void TabControlSelectionChanged(object sender, SelectionChangedEventArgs e) =>
    ((e.AddedItems[0] as TabItem)?.Content as ScrollViewer)?.Focus();