我有一个垂直控件列表,我想在每次触摸移动时显示每一个控件, 拳头,我听ManipulationDelta事件并改变图像翻译y,像这样, XAML,
<Grid ManipulationDelta="Image_ManipulationDelta">
<UserControl/>
<UserControl/>
...
<UserControl RenderTransformOrigin="0.5,0.5" >
<UserControl.RenderTransform>
<CompositeTransform x:Name="transfom" TranslateY="604"/>
</UserControl.RenderTransform>
</UserControl>
</Grid>
代码背后,
private void Image_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
this.transfom.TranslateY += e.DeltaManipulation.Translation.Y;
}
当ManipulationCompleted时,将usercontrol移动到当前视图,就像loopingselector那样。 但它的表现还不够好(与ScrollViewer平滑的scrooling相比,它很糟糕)。
然后我尝试在ScrollViewer上工作,我必须停止scrollviewer自己的滚动,两种方式,IsHitTestVisible = False或IsEnable = false.But无论如何scrollviewer如何滚动,所以,我给了scrollViewer的父级,像这样, XAML,
<phone:PivotItem ManipulationDelta="scrollViewer_ManipulationDelta">
<ScrollViewer IsHitTestVisible="False">
<StackPanel>
<UserControlHeight="604" Background="DarkRed"/>
<UserControlHeight="604" Background="DarkRed"/>
<UserControl Height="604" Background="DarkBlue"/>
</StackPanel>
</ScrollViewer>
</phone:PivotItem>
代码背后,
private void scrollViewer_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
{
Debug.WriteLine("ManipulationDelta:" + e.CumulativeManipulation.Translation.Y);
this.scrollViewer.ScrollToVerticalOffset(this.scrollViewer.VerticalOffset - e.DeltaManipulation.Translation.Y);
}
是的,它很棒,但......
IsHitTestVisible =“False”表示ScrollViewer中无法捕获任何内容,例如,我无法获取UserControl的tap事件。
所以......无论如何都可以控制ScrollViewer的滚动并使ScrollViewer活跃起来。