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

时间:2015-01-07 17:44:37

标签: c# xaml animation windows-phone-8 storyboard

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

我有一个游戏卡的布局,现在我想整个这张卡的动画。我的问题是当我开始动画时它只改变了CardPanel(Stackpanel)的宽度,而不是它的子节点的宽度,它们是TextBoxes,Images和Shapes。

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

<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中的所有元素,而不是为所有元素创建动画? 或者可能冻结布局并将其用作一个图像(我发现它有点脏)。

1 个答案:

答案 0 :(得分:1)

是的,有一种聪明的方法,不动画宽度。它的动画正是你告诉它的动画,你会注意到如果你只是手动改变面板的宽度(特别是用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>