WPF的ScrollViewer - 焦点内容如何

时间:2017-08-13 07:02:06

标签: c# wpf tabcontrol scrollviewer stackpanel

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

1)当我尝试向下/向上滚动时,使用鼠标 - >滚动效果很好

2)当我尝试点击StackPanel的内容并触摸键盘的上/下 - >滚动效果很好

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

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

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了您的问题,您的观点看起来像

<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();