忽略嵌套ScrollViewer的水平鼠标滚动

时间:2016-10-26 10:11:11

标签: xaml uwp

我在网格周围有一个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内,我也可以垂直滚动页面。这是一张图片,可以给你一个想法: enter image description here

  

问题在于触摸。当用户使用触摸设备时,我如何仍然水平滚动?当我启用HorizontalScrollMode触摸按需工作时,但使用鼠标水平滚动,我试图阻止。

有没有办法忽略嵌套ScrollViewers的水平滚动?

1 个答案:

答案 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;
}