UWP XAML ScrollViewer使用箭头键滚动

时间:2018-06-27 10:20:54

标签: image keyboard uwp-xaml scrollviewer

我在XAML和主页中有一个简单的代码:

<Grid>
    <ScrollViewer ZoomMode="Enabled" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
        <Image Source="Assets/skyline.jpg" KeyDown="Image_KeyDown">

        </Image>
    </ScrollViewer>
</Grid>

现在启动程序时,可以使用触摸板滚动,但不能使用键盘上的箭头键滚动。为什么会这样,我该如何更改这种行为?我问这个问题是因为我有一个更复杂的示例,它可以在其中工作(当然,该示例不仅是图像)。谢谢!

2 个答案:

答案 0 :(得分:1)

ScrollViewer响应未处理的键盘事件,这些事件从其内容冒出。在您的示例中,您没有看到键盘滚动,因为ImageScrollViewer都不是可聚焦的,这意味着不会有任何键盘事件起泡到ScrollViewer或起源于ImageFrameworkElement源自IsTabStop = "False",它没有焦点的概念。 ScrollViewer 可以获得焦点。但是,默认情况下,这不是因为其默认控件样式具有IsTabStop = "True"

这里的简单解决方案是在ScrollViewer上设置ScrollViewer。现在,它的焦点对准了,您将开始在UseSystemFocusVisuals="False"周围看到由系统自动绘制的粗焦点。您还可以通过设置<ScrollViewer x:Name="scrollviewer" IsTabStop="True" UseSystemFocusVisuals="False" ZoomMode="Enabled" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> <Image Source="Assets/skyline.jpg"> </Image> </ScrollViewer> 来禁用它。

在标记中...

Activity.getIntent

注意:这仅是必需的,因为内容中没有任何内容可以引起关注。在更复杂的情况下,您通常会在ScrollViewer中有一些可以重点关注的内容(例如“ foo”按钮)。在这些情况下,滚动会如您所愿地通过键盘进行,因为某些“ foo”具有焦点。

答案 1 :(得分:0)

您可以使用ChangeView的{​​{1}}方法来滚动ScrollViewer事件处理程序。

请参考以下代码示例:

Window.Current.CoreWindow.KeyDown
<ScrollViewer x:Name="scrollviewer" ZoomMode="Enabled" HorizontalScrollBarVisibility="Auto"  VerticalScrollBarVisibility="Auto">
        <Image Source="Assets/skyline.jpg">
        </Image>
</ScrollViewer>