【问题标题】:Disable panning in UWP scrollviewer with single finger用单指禁用 UWP 滚动查看器中的平移
【发布时间】:2017-09-21 17:35:48
【问题描述】:

我想用单指禁用 UWP 滚动查看器的平移。相反,我想用两根手指平移。

提前致谢

【问题讨论】:

  • 我可以在 wpf 中使用PanningMode="VerticalOnly"。

标签: uwp scrollview


【解决方案1】:

如果你想禁用单指 UWP 滚动查看器的平移,你应该可以将 ScrollViewer 的 HorizontalScrollMode 和 VerticalScrollMode 设置为 Disabled。两指无法滚动。

您应该能够检测到ScrollViewer 上的手指数。如果有一根手指,我们可以将ScrollViewer的HorizontalScrollMode和VerticalScrollMode设置为Disabled。如果有2个手指,我们可以将ScrollViewer的HorizontalScrollMode和VerticalScrollMode设置为Enable。

为了检测 ScrollViewer 上的手指数量,我们应该能够监听指针事件。有Complete example监听指针事件。

例如:

<ScrollViewer Name="MyScrollViewer"  HorizontalScrollMode="Disabled"  
              VerticalScrollMode="Disabled" 
              PointerCaptureLost="MyScrollViewer_PointerCaptureLost" PointerExited="MyScrollViewer_PointerExited"
              PointerEntered="MyScrollViewer_PointerEntered">
    <StackPanel>
        <Rectangle Width="800" Height="800" Fill="Red"></Rectangle>
        <Rectangle Width="800" Height="800" Fill="Beige"></Rectangle>
        <Rectangle Width="800" Height="800" Fill="CadetBlue"></Rectangle>
        <Rectangle Width="800" Height="800" Fill="DarkBlue"></Rectangle>
    </StackPanel>
</ScrollViewer>

背后的代码:

HashSet<uint> _pointers = new HashSet<uint>();
private void MyScrollViewer_PointerCaptureLost(object sender, PointerRoutedEventArgs e)
{
    _pointers.Remove(GetPoint(e));
}

private void MyScrollViewer_PointerExited(object sender, PointerRoutedEventArgs e)
{
    _pointers.Remove(GetPoint(e));
}

private void MyScrollViewer_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    _pointers.Add(GetPoint(e));
    Debug.WriteLine("Count of points is" + _pointers.Count);
    if (_pointers.Count>=2)
    {
        MyScrollViewer.HorizontalScrollMode = ScrollMode.Enabled;
        MyScrollViewer.VerticalScrollMode = ScrollMode.Enabled;
    }
    else
    {
        MyScrollViewer.HorizontalScrollMode = ScrollMode.Disabled;
        MyScrollViewer.VerticalScrollMode = ScrollMode.Disabled;
    }
}
uint GetPoint(PointerRoutedEventArgs e)
{
    return e.GetCurrentPoint(MyScrollViewer).PointerId;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多