我在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;当我尝试的时候。任何人都知道如何绑定到实际高度?
答案 0 :(得分:0)