属性 Visibility 更改时为 StackPanel 设置动画

Posted

技术标签:

【中文标题】属性 Visibility 更改时为 StackPanel 设置动画【英文标题】:Animate a StackPanel when the property Visibility changes 【发布时间】:2010-09-30 18:13:33 【问题描述】:

在 WPF 3.5(带有 SP1)中,我有一个简单的 StackPanel,当我更改属性 Visibility 时我想为它设置动画。我不知道这个 StackPanel 的高度,因为它的内容决定了它的高度。因此,当我将 StackPanel 的属性更改为 Visible (progressPanel.Visibility = Visibility.Visible;) 时,我希望看到一个动画(可能是从 0 到 X 的 DoubleAnimationUsingKeyFrames)。

此外,我有多个 StackPanel 我希望看到这种行为(所以在最好的情况下,我需要一些通用的东西)。 有人知道怎么做吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以创建和重用在可见性更改时触发动画的自定义 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? 不清楚你想要达到什么样的效果。请更新您的问题并提供有关所需 StackPanel 行为的详细信息。手动更改 StackPanel.Height 属性对我来说不是一个好主意【参考方案2】:

如果您需要一种具有垂直增长动画的扩展效果。如果是垂直方向的面板,则在面板的 ScaleTransform.ScaleY 属性上做一个从 0 到 1 的双重动画。

【讨论】:

为什么对我不利:)。当您无法确定 stackPanel 的实际高度时,最好将 ScaleTransform.ScaleX 从 0 设置为 1 的动画,这样可以解决问题,尝试一下,然后投反对票。

以上是关于属性 Visibility 更改时为 StackPanel 设置动画的主要内容,如果未能解决你的问题,请参考以下文章

更改css中的可见性属性?

DIV中display和visibility属性差别

backface-visibility 属性

CSS visibility与display 属性

CSS visibility 属性

关于属性更改的 jQuery 动画