Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WP8中同时设置容器所有子容器的动画_C#_Xaml_Animation_Windows Phone 8_Storyboard - Fatal编程技术网

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

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

我正在使用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>