我正在尝试创建一个非常简单的淡出效果,只要用户控件的可见性变为隐藏,就会发生这种效果。
为此,我创建了一个情节提要,只要用户控件的可见性更改为隐藏,就会触发该情节提要。然后它首先将可见性再次更改为可见,以便我可以对其进行动画处理。然后它会随着时间的推移改变不透明度,最后将可见性更改为隐藏。然而,这会导致动画永远重复。
在最后一帧中将控件从可见更改为折叠时,它确实工作了一次,但是用户控件将永远不会再次可见(我监听该IsVisibleChanged
事件并且它在折叠一次后永远不会被触发,即使我确实有control.Visibility = Visibility.Visible;
该事件处理程序末尾的代码。
那么如何确保动画只触发一次,最好没有代码,这样我就可以在一个不错的资源字典中添加这个淡出控件,它总是可以工作的。我在 SO 上看到了一些与此相关的问题,尤其是这个问题,但我无法让它发挥作用。
我到目前为止的代码:
<UserControl.Style>
<Style TargetType="{x:Type UserControl}">
<Style.Triggers>
<Trigger Property="Visibility" Value="Hidden">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:3" FillBehavior="Stop"/>
<ObjectAnimationUsingKeyFrames BeginTime="0:0:3.5" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Hidden</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>