当属性Visibility改变时,如何为StackPanel添加动画效果

3
在WPF 3.5(带SP1),我有一个简单的StackPanel,当我改变Visibility属性时,我想要对它进行动画处理。我不知道这个StackPanel的高度,因为它的内容决定了它的高度。所以当我将我的StackPanel的属性改变为Visible (progressPanel.Visibility = Visibility.Visible;) 时,我希望能看到一个动画效果(可能是从0到X的DoubleAnimationUsingKeyFrames)。
此外,我有多个StackPanel,我希望能看到同样的行为(所以在最好的情况下,我需要一些通用的东西)。有人知道如何做到这一点吗?
谢谢!
2个回答

4
您可以创建和重用自定义的StackPanel样式,在可见性更改时触发动画:
<Style x:Key="MyStyle" TargetType="{x:Type StackPanel}">
    <Style.Triggers>
        <Trigger Property="Visibility" Value="Visible">
            <Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard >
                        <DoubleAnimation .../>
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
        </Trigger>
    </Style.Triggers>
</Style>

你非常好地回答了我的问题的一部分。第二部分是关于StackPanel的高度。考虑到我不知道高度,我该如何使用DoubleAnimation?<DoubleAnimation Storyboard.TargetProperty="(FrameworkElement.Height)" From="0" To="--???--" Duration="00:00:00.5" /> - Martin
不清楚您想要实现什么样的效果。请更新您的问题并提供有关所需StackPanel行为的详细信息。手动更改StackPanel.Height属性对我来说似乎不是一个好主意。 - aku

2
如果您需要一种随着动画垂直增长的扩展效果,请对面板的ScaleTransform.ScaleY属性进行双重动画,从0到1,如果它是一个垂直定向的面板。

为什么对我打负分啊 :). 当你无法确定stackPanel的实际高度时,最好将ScaleTransform.ScaleX从0到1进行动画处理,这样就可以解决问题了。试一下,然后再投反对票吧。 - Jobi Joy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接