ScrollViewer
реагирует на необработанные события клавиатуры, которые всплывают из его содержимого. В вашем примере вы не видите прокрутки клавиатуры, потому что ни Image
, ни ScrollViewer
не являются фокусируемыми, что означает, что не будет никаких событий клавиатуры, которые всплывают или исходят из ScrollViewer
. Image
происходит от FrameworkElement
, который не имеет понятия фокуса. ScrollViewer может получить фокус. Но по умолчанию это не так, потому что его стиль управления по умолчанию имеет IsTabStop = "False"
.
Простое решение здесь - установить 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>
Примечание : Это необходимо только потому, что в контенте нет ничего, что могло бы привлечь внимание. В более сложных сценариях у вас часто будет что-то в ScrollViewer, на которое можно сфокусироваться (например, кнопка «foo»). В этих сценариях прокрутка происходит с помощью клавиатуры, как и следовало ожидать, потому что у некоторого 'foo' есть фокус.