2012-08-01 38 views
0

我已经到处我能想到的,但我不能找到这个问题的答案...在Windows Phone的同时故事板7

我要让一种模板,故事板为Windows Phone 7(XAML和c#),然后使用该故事板以同样的方式动画多个对象。 (即同时旋转所有物体90度)任何想法?

它必须动态完成。我的意思是我想在程序中给不同的对象分配几个不同的故事板,所以它不能是静态的。

我一直面临的主要问题是故事板必须停止再使用,因此它们不能同时运行。但是我在想,如果我可以制作Storyboard的临时副本,那么我可以同时运行它们吗?请给我任何你有的想法。提前致谢!

我初始化我在一个网格对象(矩形)这样:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <Rectangle Name="rec1" Height="80" Width="10" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,30,140,0"> 
     <Rectangle.RenderTransform> 
     <RotateTransform x:Name="rec1Transform" Angle="0" CenterX="5" CenterY="-10" /> 
     </Rectangle.RenderTransform> 
    </Rectangle> 
    <Rectangle Name="rec2" Height="10" Width="80" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,15,55,0"> 
    . 
    . 
    . 
    </Rectangle> 
</Grid> 

在这一刻,有我,我想通过多次使用4个一般的故事板,和我使用的是一系列的按钮模仿所有的动画。例如:

我的展板

private void rotate1(object parameter, object secondParameter, String Target) 
{ 

    oneTwo.Stop(); 
    oneTwo.Children[0].SetValue(Storyboard.TargetNameProperty, Target); 
    oneTwo.Begin(); 
} 

private void rotate2(object parameter, object secondParameter, String Target) 
{ 
    twoThree.Stop(); 
    twoThree.Children[0].SetValue(Storyboard.TargetNameProperty, Target); 
    twoThree.Begin(); 
} 

private void rotate1Inverse(object parameter, object secondParameter, string Target) 
{ 
    twoOne.Stop(); 
    twoOne.Children[0].SetValue(Storyboard.TargetNameProperty, Target); 
    twoOne.Begin(); 
} 

private void rotate2Inverse(object parameter, object secondParameter, string Target) 
{ 
    threeTwo.Stop(); 
    threeTwo.Children[0].SetValue(Storyboard.TargetNameProperty, Target.ToString()); 
    threeTwo.Begin(); 
} 

我的模拟按钮

//Rotate Buttons 
private void button_Click1(object sender, RoutedEventArgs e) 
{ 
    rec1Transform.CenterY = -10; 

    rotate2(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec1Transform"); 
} 

private void button_Click2(object sender, RoutedEventArgs e) 
{ 
    rec2Transform.CenterX = -10; 

    rotate1(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec2Transform"); 
} 

private void button_Click3(object sender, RoutedEventArgs e) 
{ 
    rec3Transform.CenterY = -10; 

    rotate1(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec3Transform"); 
} 

private void button_Click4(object sender, RoutedEventArgs e) 
{ 
    rec4Transform.CenterX = -10; 

    rotate2(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec4Transform"); 
} 

private void button_Click5(object sender, RoutedEventArgs e) 
{ 
    rec5Transform.CenterY = -10; 

    rotate2(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec5Transform"); 
} 

private void button_Click6(object sender, RoutedEventArgs e) 
{ 
    rec6Transform.CenterX = -10; 

    rotate2(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec6Transform"); 
} 

private void button_Click7(object sender, RoutedEventArgs e) 
{ 
    rec7Transform.CenterY = -10; 

    rotate1(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec7Transform"); 
} 

//Inverse Rotate Buttons 
private void button_Click1_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec1Transform.CenterY = 90; 

    rotate1Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec1Transform"); 
} 

private void button_Click2_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec2Transform.CenterX = 90; 

    rotate2Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec2Transform"); 
} 

private void button_Click3_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec3Transform.CenterY = 90; 

    rotate2Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec3Transform"); 
} 

private void button_Click4_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec4Transform.CenterX = 90; 

    rotate1Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec4Transform"); 
} 

private void button_Click5_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec5Transform.CenterY = 90; 

    rotate1Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec5Transform"); 
} 

private void button_Click6_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec6Transform.CenterX = 90; 

    rotate1Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec6Transform"); 
} 

private void button_Click7_Inverse(object sender, RoutedEventArgs e) 
{ 
    rec7Transform.CenterY = 90; 

    rotate2Inverse(RotateTransform.AngleProperty, PlaneProjection.RotationZProperty, "rec7Transform"); 
} 

的问题是,我想在多达20个矩形在同时使用这4个基本的故事板一次,从而使所有20个矩形一致动画。但我不想为每个矩形分配一个静态故事板,因为我想应用于每个矩形的故事板每隔一秒左右就会改变一次。我也将同时使用所有4个故事板。 (即我将使用“oneTwo”为3个矩形,“twoThree”为5个矩形,“twoOne”为8个矩形,“threeTwo”为2个矩形)

我希望所有说得通。该计划仅基于同时动画多个矩形,任何帮助或建议将不胜感激。

+0

如何显示布局中的所有对象。以适当的顺序,如列表或网格或不当。如果你想以适当的方式显示绑定图像到一个堆叠面板并生成动画 – 2012-08-01 06:37:09

+0

我现在在上面张贴了我的矩形代码,但是如何能够动画所有的堆栈面板中的对象是否在同一时间? – Jason 2012-08-02 02:46:36

+0

对不起,我必须是愚蠢的或某事,但我仍然无法弄清楚这一点。有人可以帮忙吗? – Jason 2012-08-07 17:44:22

回答

0

尝试矩形绑定在一个StackPanel

<Listbox> 
<ListBox.ItemTemplate>   
    <DataTemplate> 
<StackPanel> 
<StackPanel.Resources> 
    <Storyboard x:Name="FirstStoryBoard"> 
     <DoubleAnimation Storyboard.TargetName="rectangle" 
         Storyboard.TargetProperty="Width" 
         From="0" 
         To="1" 
         //AutoReverse="True" 
         Duration="00:00:01" /> 
    </Storyboard> 
</StackPanel.Resources> 
<Rectangle Name="rectangle" Fill={Binding colour}> 

</Rectangle> 

</StackPanel> 

</ListBox.ItemTemplate> 
</DataTemplate> 
</Listbox> 

然后必须在列表框与colours..refer在列表框中的项目在网络绑定绑定。

然后用一个按钮点击启动故事板。故事板儿童矩形增加其宽度

FirstStoryboard.begin();

+0

我对Listbox非常熟悉,它是否可用于Windows Phone 7?因为Visual Studio 2010无法在xaml中识别它。 – Jason 2012-08-10 02:52:12