WP7 ScrollViewer以编程方式滚动背景ScrollViewer与前ScrollViewer同步

时间:2012-05-28 20:58:46

标签: c# silverlight windows-phone-7 windows-phone-7.1

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

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

有没有人知道我在Windows Phone 7.5中使用当前的API是否可以做到这一点,如果有的话,我将非常感谢您对我如何做到这一点的指示?

My Current 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);
    }

1 个答案:

答案 0 :(得分:0)

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

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

它仍然不会很流畅,但定时器触发应使滚动保持同步。