0

我正在尝试一个简单的图片滑动动画,问题是,我不知道何时设置滑入的新图片的可见性。我不想在顶部显示图片直到动画开始。顺序是这样的,屏幕上一张拉伸的图片,然后另一张相同尺寸的图片滑入前一张图片的顶部。与旧图片相比,新图片将具有更高的 Z-index。我已经设置了一个故事板,并将新图片的可见性隐藏起来。那么什么时候让新图片可见呢?是不是在打电话之前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

If you want to change the Visibility by Animation, you have to use 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>

You could also animate the Opacity from 0 to 100 to make the picture visible:

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

This way you first animate the Opacity-property to 100 (in 100ms) and after this (with BeginTime="0:0:0.1") comes the rest.

于 2013-02-04T10:44:18.433 回答