2012-08-01 92 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