C# 如何在WP8中同时设置容器所有子容器的动画
我正在使用C#为Windows Phone 8开发一个应用程序 我有一个游戏卡的布局,现在我想动画这张卡作为一个整体。我的问题是,当我启动动画时,它只会更改CardPanel(Stackpanel)的宽度,而不会更改它的子对象(文本框、图像和形状)的宽度 我的一般(简化)结构是这样的,试图通过动画来扭转一张牌C# 如何在WP8中同时设置容器所有子容器的动画,c#,xaml,animation,windows-phone-8,storyboard,C#,Xaml,Animation,Windows Phone 8,Storyboard,我正在使用C#为Windows Phone 8开发一个应用程序 我有一个游戏卡的布局,现在我想动画这张卡作为一个整体。我的问题是,当我启动动画时,它只会更改CardPanel(Stackpanel)的宽度,而不会更改它的子对象(文本框、图像和形状)的宽度 我的一般(简化)结构是这样的,试图通过动画来扭转一张牌 <Stackpanel x:Name="CardPanel"> <TextBox x:Name="Title"/> <Image x:Na
<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>