编辑2以回应评论:
在您的示例中,可以通过以下方法解决问题:
-
设置
FillBehaviour
Stop
关于动画
-
将代码中的处理程序添加到已完成事件:
<Storyboard Completed="FadeOut_Completed">
private void FadeOut_Completed(object sender, EventArgs e)
{
_viewbox.Opacity = _viewbox.Opacity; //this sets the DP value to the animated value
}
这在您的示例中有效;希望它在您的问题中有效!
原始答案
如果你设置
FillBehaviour
财产
Storyboard
(而不是默认值
HoldEnd
)动画完成后,它将还原为属性的预动画值。
保持端
根据评论更新:
如注释中所述,当
保持端
填充行为
这使得将值设置为其他值稍微有点困难。
我不确定是否有更好的方法来实现这一点,但下面的例子显示了一种解决方法。如果没有来自OP的示例用法,很难判断这是否适用,但是在这个示例中,我正在设置
Rectangle
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="Target" Storyboard.TargetProperty="Width"
From="10" To="100" Duration="0:00:01" FillBehavior="HoldEnd" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Rectangle Height="10" Width="10" Fill="Red" x:Name="Target"/>
<Button Grid.Row="1" Content="Resize">
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="Target" Storyboard.TargetProperty="Width">
<DiscreteDoubleKeyFrame Value="50" KeyTime="0:00:00" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Grid>
</Window>
这样做是因为
新的
动画将覆盖在原始文件中设置的值。