我在网格周围有一个ScrollViewer来垂直滚动它的内容。
<ScrollViewer>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
...
</Grid>
</ScrollViewer>
在这个网格内部,我有另一个水平内容的Scrollviewer。
<Grid>
<ScrollViewer Name="ScrollViewer" VerticalScrollMode="Disabled" VerticalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled" HorizontalScrollBarVisibility="Hidden">
...
</ScrollViewer>
<Button Name="ButtonRight" HorizontalAlignment="Right" VerticalAlignment="Stretch" Tapped="ButtonRight_Tapped" />
<Button Name="ButtonLeft" HorizontalAlignment="Left" VerticalAlignment="Stretch" Tapped="ButtonLeft_Tapped" />
<Grid>
HorizontalScrollMode
被禁用,HorizontalScrollBarVisibility
被隐藏,因为使用鼠标输入,我想用左/右按钮滚动内容。当鼠标位于ScrollViewer中时,HorizontalScrollMode
被禁用以防止水平滚动。
private void ButtonRight_Tapped(object sender, TappedRoutedEventArgs e)
{
ScrollViewer.ChangeView(ScrollViewer.HorizontalOffset + ScrollViewer.ActualWidth, 0, 1);
}
使用此配置,即使鼠标位于水平ScrollViewer内,我也可以垂直滚动页面。这是一张图片,可以给你一个想法:
问题在于触摸。当用户使用触摸设备时,我如何仍然水平滚动?当我启用
HorizontalScrollMode
触摸按需工作时,但使用鼠标水平滚动,我试图阻止。
有没有办法忽略嵌套ScrollViewers的水平滚动?
答案 0 :(得分:0)
我找到了一个非常简单的解决方案来解决我的问题。
我在嵌套的水平ScrollViewer
中添加了PointerEntered
<ScrollViewer Name="ScrollViewer" PointerEntered="ScrollViewerImages_PointerEntered" VerticalScrollMode="Disabled" VerticalScrollBarVisibility="Disabled" HorizontalScrollMode="Disabled" HorizontalScrollBarVisibility="Hidden">
...
</ScrollViewer>
并在PointerDeviceType为Touch时启用HorizontalScrollMode
。
private void ScrollViewerImages_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType == PointerDeviceType.Touch)
ScrollViewerImages.HorizontalScrollMode = ScrollMode.Enabled;
else
ScrollViewerImages.HorizontalScrollMode = ScrollMode.Disabled;
}