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