淡出动画不断重复,可能触发自身?

时间:2013-03-13 17:12:58

标签: wpf xaml storyboard

我正在尝试创建一个非常简单的淡出效果,只要用户控件的可见性变为隐藏就会发生这种效果。

为此,我创建了一个故事板,只要用户控件的可见性更改为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>

1 个答案:

答案 0 :(得分:0)

如果您刚刚删除了将隐私可见性设置为ObjectAnimation,它会正常工作吗?因此控件在技术上是可见的,但不透明度为0?