我正在尝试创建一个非常简单的淡出效果,只要用户控件的可见性变为隐藏就会发生这种效果。
为此,我创建了一个故事板,只要用户控件的可见性更改为Hidden,就会触发该故事板。然后它首先将可见性再次更改为可见,以便我可以为其设置动画。然后它会随着时间的推移改变不透明度,最后将可见性更改为隐藏。然而,这会导致动画永远重复。
在最终帧中将控件从可见更改为折叠时,它确实可以工作一次,但用户控件将永远不会再次显示(我会监听IsVisibleChanged
事件,并且它在崩溃后永远不会被触发曾经,即使我确实在该事件处理程序的末尾有代码control.Visibility = Visibility.Visible;
。
那么如何确保动画只被触发一次,最好没有代码,所以我可以在一个好的资源字典中添加这个淡出控件,它总能工作。我在SO上看到了一些与此相关的问题,尤其是this one,但我无法让它发挥作用。
到目前为止我的代码:
<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>
答案 0 :(得分:0)
如果您刚刚删除了将隐私可见性设置为ObjectAnimation
,它会正常工作吗?因此控件在技术上是可见的,但不透明度为0?