0

ユーザーが「FrontScroll」をスクロールすると、アプリが同じサイズの「BackgroundScroll」を同じオフセットまで同じ速度で自動的にスクロールするアニメーションを作成しようとしています。フロントスクロールとバックグラウンドスクロールの間にレイヤードされているのは、静止したままにしておきたい画像です。中央の画像は画面の1/4しか占めておらず、残りの画像はpngで透明になっています。ユーザーがスクロールすると、静止画像の上と後ろに他の画像が徐々に表示されるような効果を作成しようとしています。

現在、ManipulationCompletedにイベントがありますが、これは非常に「ぎこちない」効果を生み出し、ユーザーが画面から指を離すまで背景のスクロールが所定の位置にスクロールしません。操作が完了したかどうかに関係なく、アニメーションを瞬時に作成して、2つのScrollViewerを完全に同期させたいと思います。また、現在、ユーザーがScrollViewerを「フリック」してより長い距離を移動すると、ManipulationCompletedイベントが発生しないため、2つのScrollViewerが同期しなくなります。MouseWheel、MouseLeave、MouseMoveイベントも試しましたが、探している効果が得られるものはありません。

私がやろうとしていることがWindowsPhone7.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

残念ながらWP7 のScrollイベントがないScrollViewerため、2 つの ScrollViewer の同期を維持する「スムーズな」方法があるかどうかはわかりません。

ただし、ScrollViewers の同期を維持する方法があります。 を作成しDispatcherTimer、Interval プロパティを small に設定しTimeSpanます。例えば0.2秒。イベント ハンドラで、Tick2 番目のスクロール ビューアの VerticalOffset を最初のスクロール ビューアの垂直オフセットに設定します (ManipulationCompleted イベントで行っているように)。

それでもスムーズではありませんが、タイマーの起動によりスクロールの同期が維持されるはずです。

于 2012-05-28T21:57:04.067 に答える