我有一个垂直的控件列表,我想在每次触摸移动时显示每个控件,拳头,我听 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 时,将用户控件移动到当前视图,就像循环选择器一样。但它的表现还不够好(与 ScrollViewer 的平滑滚动相比,它很糟糕)。
然后我尝试在 ScrollViewer 上工作,我必须停止 scrollviewer 自己的滚动,两种方式,IsHitTestVisible=False 或 IsEnable = false。但无论如何,scrollviewer 如何滚动,所以,我给 scrollViewer 一个父级,像这样, xml,
<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 的点击事件。所以...无论如何控制 ScrollViewer 的滚动并让 ScrollViewer 活着。