如何在 WP8 中同时为容器的所有子项设置动画

How to animate all children of a container at the same time in WP8

我正在使用 C# 为 Windows Phone 8 开发应用程序。

我有一张游戏卡的布局,现在我想为这张卡制作整体动画。我的问题是,当我启动动画时,它只会更改 CardPanel (Stackpanel) 的宽度,而不是它的子项(文本框、图像和形状)的宽度。

我的一般(简化)结构是这样的,试图用动画来翻转卡片。

<Stackpanel x:Name="CardPanel">
    <TextBox x:Name="Title"/>
    <Image   x:Name="Image"/>
    <!--other elements-->
    <Storyboard x:Name="TurnCardSB">
        <DoubleAnimation Storyboard.TargetName="CardPanel" 
                         Storyboard.TargetProperty="Width" 
                         From="400" To="5" Duration="0:0:0.5"
                         AutoReverse="True"/>
    </Storyboard>
</Stackpanel>

有没有一种聪明的方法可以将这个故事板应用到这个 Stackpanel 中的所有元素,而不是为所有元素创建一个动画? 或者冻结布局并将其用作一张图片(我觉得这样有点脏)。

是的,有一个聪明的方法,不要为宽度设置动画。它完全按照您的指示进行动画处理,您会注意到,如果您只是 手动 更改面板的宽度(尤其是 StackPanel),它不会缩放以您期望的方式添加元素。

相反,使用 ScaleTransform 实际 缩放 面板及其内容:

<Stackpanel x:Name="CardPanel">
    <StackPanel.RenderTransform>
       <ScaleTransform x:Name=CardPanelTransform />
    </StackPanel.RenderTransform>
    <TextBox x:Name="Title"/>
    <Image   x:Name="Image"/>
    <!--other elements-->
    <Storyboard x:Name="TurnCardSB">
        <DoubleAnimation Storyboard.TargetName="CardPanelTransform " 
                         Storyboard.TargetProperty="ScaleX" 
                         From="1" To="0.01" Duration="0:0:0.5"
                         AutoReverse="True"/>
    </Storyboard>
</Stackpanel>