元素在动画激发之前崩溃,所以你不会看到它

时间:2014-11-26 16:10:07

标签: wpf animation

我在WPF窗口上有一个StackPanel,并将Visibility属性绑定到窗口上的另一个元素。 StackPanel出现并正确消失,所以我想我会添加一个动画。

我尝试了以下样式,我将其应用于StackPanel ......

        <Style x:Key="VisibilityChangedStyle"
           TargetType="{x:Type StackPanel}">
        <Style.Triggers>
            <Trigger Property="Visibility"
                     Value="Visible">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Height"
                                             From="0"
                                             To="30"
                                             Duration="0:0:0.3" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
            </Trigger>
            <Trigger Property="Visibility"
                     Value="Collapsed">
                <Trigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Height"
                                             From="30"
                                             To="0"
                                             Duration="0:0:0.3" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.EnterActions>
                <Trigger.ExitActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="Height"
                                             From="0"
                                             To="30"
                                             Duration="0:0:0.3" />
                        </Storyboard>
                    </BeginStoryboard>
                </Trigger.ExitActions>
            </Trigger>
        </Style.Triggers>
    </Style>

当显示StackPanel时,这样可以正常工作,但是当它被隐藏时,它会在没有动画的情况下消失。

我的猜测是,在动画运行之前,Visibility属性被设置为Collapsed,但我无法解决这个问题。我是动画新手,花了大约两个小时阅读,我很困惑。

请有人向我解释实现我想要的最佳方式。感谢

另外,有没有办法像我一样使用StackPanel的实际高度而不是硬编码?我看到有人使用一种聪明的技术将动画的To属性绑定到元素的ActualHeight属性,但是我得到了一个异常&#34;无法冻结这个Storyboard时间轴树以便在线程之间使用&#34;当我尝试的时候。任何人都知道如何绑定到实际高度?

1 个答案:

答案 0 :(得分:0)