0

スライドインする画像の簡単なアニメーションを試しています。問題は、スライドする新しい画像の可視性をいつ設定するかわからないことです。画像を上に表示したくないのです。アニメーションが始まるまで。シーケンスは次のようになります。画面上に1つの引き伸ばされた画像が表示され、次に同じサイズの別の画像が前の画像の上にスライドします。新しい画像は、古い画像と比較して高いZインデックスを持ちます。ストーリーボードを設定し、新しい画像の可視性を非表示にしました。では、いつ新しい画像を表示できるようにしますか?電話をかける直前StoryBoard.Begin(MyNewPicture)ですか?だからそれは

    //create picture object 
    //...
    MyNewPicture.Visibility = Visiblity.Hidden;
    //do some intialisation, and create StoryBoard
    //...
    MyNewPicture.Visibility = Visibility.Visible;
    MyStoryBoard.Begin(MyNewPicture);`

これは私の速いコンピューターで動作しますが、遅いコンピューターで実行した場合、パフォーマンスの低下や画面の遅れなどがある場合、新しい画像がその下の画像を覆っているように見えるのではないかと思いますアニメーションが始まる直前に表示されますか?これにより、画面にちらつきが生じますが、これは望ましくありません。

または、アニメーションの一部として可視性を配置する必要がありますか?他の誰かによる以前のわずかに類似した質問に対するこの回答を見てください。代わりに、XamlでObjectAnimationUsingKeyFramesを使用する必要がありますか?アニメーションが開始されると、新しい画像が(永久に)表示されるはずです。私の場合、表示を切り替える必要はありません。アニメーションの開始時に、アニメーションの前ではなく、新しい画像を表示したいだけです(そうしないと、前の画像がブロックされます)。

4

1 に答える 1

2

Visibilityby Animationを変更する場合は、次を使用する必要がありますObjectAnimationUsingKeyFrames

    <Storyboard x:Key="StartPicture">
        <ObjectAnimationUsingKeyFrames Duration="0:0:0.1" Storyboard.TargetProperty="Visibility">
            <ObjectKeyFrameCollection>
                <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" KeyTime="0:0:0"></DiscreteObjectKeyFrame>
            </ObjectKeyFrameCollection>
        </ObjectAnimationUsingKeyFrames>
        <DoubleAnimation BeginTime="00:00:00.1" Storyboard.TargetProperty="Property" To="Value" />
    </Storyboard>

不透明度を0から100までアニメートして、画像を表示することもできます。

    <Storyboard 
        <DoubleAnimation Storyboard.TargetProperty="Opacity" To="100" Duration="0:0:0.1"  />
        <DoubleAnimation BeginTime="0:0:0.1" Storyboard.TargetProperty="PropertyToAnimate" To="Value"  />
    </Storyboard>

このようにして、最初に不透明度プロパティを100(100ms単位)にアニメートし、その後(with BeginTime="0:0:0.1")に残りをアニメートします。

于 2013-02-04T10:44:18.433 に答える