我正在尝试一个简单的动画相互滑动的图片,问题是,我不知道何时设置滑动的新图片的可见性。我不想显示动画开始前的图片。序列是这样的,屏幕上有一张拉伸的图片,然后另一张相同尺寸的图片滑入上一张图片的顶部。与旧图片相比,新图片的Z指数更高。我已经设置了一个故事板,并隐藏了新图片的可见性。那么我什么时候可以看到新图片呢?在致电StoryBoard.Begin(MyNewPicture)
之前是不是?所以它变成
//create picture object
//...
MyNewPicture.Visibility = Visiblity.Hidden;
//do some intialisation, and create StoryBoard
//...
MyNewPicture.Visibility = Visibility.Visible;
MyStoryBoard.Begin(MyNewPicture);`
这适用于我的快速计算机,但我想知道,如果我在慢速计算机上运行它,如果有某种性能减慢/屏幕滞后等,它会使新图像看起来覆盖下面的图片它何时变得可见,就在动画开始之前?这将在屏幕上产生闪烁,这是不可取的。
或者我应该将可见性作为动画的一部分?请查看此answer以及其他人之前稍微类似的问题。我应该在Xaml中使用ObjectAnimationUsingKeyFrames吗?请注意,一旦动画开始,新图片应该是可见的(永远),在我的情况下不需要切换可见性。我只是希望新动画在动画开始时可见,而不是在动画之前(或者它会阻挡上一张图片)。
答案 0 :(得分:1)
如果您想通过动画更改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(在100毫秒内),之后(使用BeginTime="0:0:0.1"
)将其余部分设置为动画。