【发布时间】:2017-09-21 17:35:48
【问题描述】:
我想用单指禁用 UWP 滚动查看器的平移。相反,我想用两根手指平移。
提前致谢
【问题讨论】:
-
我可以在 wpf 中使用
PanningMode="VerticalOnly"。
标签: uwp scrollview
我想用单指禁用 UWP 滚动查看器的平移。相反,我想用两根手指平移。
提前致谢
【问题讨论】:
PanningMode="VerticalOnly"。
标签: uwp scrollview
如果你想禁用单指 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;
}
【讨论】: