我在XAML和主页中有一个简单的代码:
<Grid>
<ScrollViewer ZoomMode="Enabled" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Image Source="Assets/skyline.jpg" KeyDown="Image_KeyDown">
</Image>
</ScrollViewer>
</Grid>
现在启动程序时,可以使用触摸板滚动,但不能使用键盘上的箭头键滚动。为什么会这样,我该如何更改这种行为?我问这个问题是因为我有一个更复杂的示例,它可以在其中工作(当然,该示例不仅是图像)。谢谢!
答案 0 :(得分:1)
ScrollViewer
响应未处理的键盘事件,这些事件从其内容冒出。在您的示例中,您没有看到键盘滚动,因为Image
和ScrollViewer
都不是可聚焦的,这意味着不会有任何键盘事件起泡到ScrollViewer
或起源于Image
。 FrameworkElement
源自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>