无法在WPF中将键盘焦点设置为ScrollViewer

w41d8nur  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(166)

我有一个控件,旁边有一个按钮和scrollviewer。我希望能够通过箭头键或tab键来改变键盘焦点。我已经将scrollviewer的focusable设置为true,但它似乎仍然不能通过键盘获得焦点。如果我单击scrollviewer,然后我可以使用箭头键(向上/向下)滚动,但我实际上不能不使用鼠标导航到它。
我可以很好地聚焦在按钮上,如果我为另一个控件(在相同的位置)(如ScrollContentPresenter)更改ScrollViewer,那么另一个控件可以像我所期望的那样在自身和按钮之间切换焦点。
我试着理解为什么ScrollViewer不能获得焦点。我发现的所有搜索结果都有相反的问题(ScrollViewer窃取焦点)。另外,如果我在ScrollViewer内部的控件上将focusable设置为true,那么它也可以获得焦点。ScrollViewer似乎不可能获得焦点。
下面是注解掉ScrollContentPresenter(用于替换ScrollViewer时可以获得焦点)的代码示例。

<Grid >
    <StackPanel Orientation="Horizontal">
        <Button Height="50" Width="300" Style="{StaticResource ButtonStyleLol}" />
        <ScrollViewer Height="200" Width="1300"  Focusable="True">
            <StackPanel Height="1000" >
                <StackPanel.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="Black"/>
                        <GradientStop Color="#FFF71E1E" Offset="1"/>
                    </LinearGradientBrush>
                </StackPanel.Background>
            </StackPanel>
        </ScrollViewer>
        <!--<ScrollContentPresenter Height="200" Width="1300"  Focusable="True">
            <ScrollContentPresenter.Content>
                <StackPanel Height="1000">
                    <StackPanel.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="Black"/>
                            <GradientStop Color="#FFF71E1E" Offset="1"/>
                        </LinearGradientBrush>
                    </StackPanel.Background>
                </StackPanel>
            </ScrollContentPresenter.Content>
        </ScrollContentPresenter>-->
    </StackPanel>
</Grid>
w6mmgewl

w6mmgewl1#

ScrollViewerIsTabStop属性设置为true似乎对我有用:

<ScrollViewer IsTabStop="True" Focusable="True">

相关问题