我正在尝试创建一个动画,当用户滚动"FrontScroll"时,应用程序会自动以相同的速率滚动相同大小的"BackgroundScroll"到相同的偏移量。在正面和背景滚动之间分层的是我想保持静态的图像。中间的图像只填满屏幕的 1/4,图像的其余部分在 png 中是透明的。我正在尝试创建当用户滚动时其他图像逐渐出现在静态图像上方和后面的效果。
目前,我在 ManipulationCompleted 上有一个有效的事件,但它会产生非常"抖动"的效果,因为背景滚动不会滚动到位置,直到用户从屏幕上抬起手指。我想使动画即时,无论操作是否完成,从而使 2 个 ScrollViewer 保持完美同步。同样目前,当用户"轻拂"ScrollViewer 以移动更远的距离时,ManipulationCompleted 事件不会触发,因此 2 个 ScrollViewer 变得不同步。我也尝试过MouseWheel,MouseLeave,MouseMove事件,但没有一个得到我想要的效果。
有谁知道我正在尝试做的事情是否可以使用 Windows Phone 7.5 中的当前 API 进行,如果是这样,我将不胜感激我如何做到这一点的任何指示?
我当前的 XAML 和代码隐藏事件如下所示。
<ScrollViewer HorizontalAlignment="Center" Margin="0,0,0,0" Name="backgroundScroll" VerticalAlignment="Top" Background="Transparent" MaxHeight="Infinity">
<Image HorizontalAlignment="Center" Height="2000" Stretch="Fill" Source="background@2x.png" />
</ScrollViewer>
<Image Source="MiddleStatic@2x.png" HorizontalAlignment="Center" Name="MiddleStatic" Stretch="Fill" VerticalAlignment="Top" Margin="-1,-1,0,0" />
<ScrollViewer HorizontalAlignment="Center" Name="FrontScroll" VerticalAlignment="Top" MaxHeight="Infinity" MinHeight="0" ManipulationCompleted="FrontScroll_ManipulationCompleted">
<StackPanel Background="#00000000">
<Image Height="2000" Source="FrontScrollImage@2x.png" HorizontalAlignment="Center" Name="FrontScroll" Stretch="Fill" />
</StackPanel>
</ScrollViewer>
</Grid>
private void FrontScroll_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
backgroundScroll.ScrollToVerticalOffset(((ScrollViewer)sender).VerticalOffset);
}
不幸的是,因为WP7 ScrollViewer
没有Scroll
事件,我不确定是否有一种"平滑"的方式来保持两个ScrollViewer同步。
但是,有一种方法可以使ScrollViewer保持同步 - 创建一个DispatcherTimer
,并将Interval属性设置为一个小TimeSpan
;例如0.2秒。在 Tick
事件处理程序中,将第二个滚动查看器的 VerticalOffset 设置为第一个滚动查看器的垂直偏移量(就像在 ManipulationCompleted 事件中所做的那样)。
它仍然不会流畅,但计时器触发应该保持滚动同步。