0

我正在尝试创建一个动画,当用户滚动“FrontScroll”时,应用程序会自动以相同的速度滚动相同大小的“BackgroundScroll”到相同的偏移量。在前面和背景滚动之间分层的是一个我想保持静止的图像。中间的图像只占屏幕的 1/4,其余的图像在 png 中是透明的。我正在尝试创建当用户滚动时其他图像逐渐出现在静态图像上方和后面的效果。

目前,我在 ManipulationCompleted 上有一个有效的事件,但是它会产生非常“抖动”的效果,因为在用户从屏幕上抬起手指之前,背景滚动不会滚动到某个位置。我想让动画即时,无论操作是否完成,从而使 2 个 ScrollViewer 保持完美同步。同样目前,当用户“轻拂” ScrollViewer 以移动更远的距离时,ManipulationCompleted 事件不会触发,因此 2 个 ScrollViewer 变得不同步。我也尝试过 MouseWheel、MouseLeave、MouseMove 事件,但都没有得到我想要的效果。

有谁知道我正在尝试使用 Windows Phone 7.5 中的当前 API 做的事情是否可行,如果是这样,任何关于我如何做到这一点的指针将不胜感激?

我当前的 XAML 和 CodeBehind 事件如下。

        <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);
    }
4

1 回答 1

0

Scroll不幸的是,因为WP7没有事件ScrollViewer,我不确定是否有一种“平滑”的方式来保持两个 ScrollViewer 同步。

但是,有一种方法可以使 ScrollViewers 保持同步 - 创建一个DispatcherTimer,并将 Interval 属性设置为一个 small TimeSpan;例如 0.2 秒。在Tick事件处理程序中,将第二个滚动查看器的 VerticalOffset 设置为第一个滚动查看器的垂直偏移量(就像您在 ManipulationCompleted 事件中所做的那样)。

它仍然不会平滑,但计时器触发应该保持滚动同步。

于 2012-05-28T21:57:04.067 回答