我正在尝试一个简单的图片叠放的动画,问题是,我不知道何时设置新图片的可见性。在动画开始之前,我不想在顶部显示图片。顺序是这样的,一张拉伸的图片在屏幕上,然后另一张相同尺寸的图片在前一张图片的顶部滑入。与旧图片相比,新图片将具有更高的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吗?请注意,一旦动画开始,新图片应该是可见的(永远),在我的情况下没有必要切换可见性。我只希望新图片在动画开始时可见,而不是在动画之前(否则它会阻塞前一张图片)。
如果要通过动画更改Visibility
,则必须使用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为单位),然后(使用BeginTime="0:0:0.1"
)设置其余属性。