2012-08-01 5 views
0

Я посмотрел везде, где я мог думать, но я не могу найти ответ на этот вопрос ...одновременные раскадровки в Windows Phone 7

Я хочу, чтобы сделать своего рода шаблон раскадровки для Windows Phone 7 (XAML и C#), а затем использовать эту раскадровку для анимации нескольких объектов одинаково. (т. е. одновременно поворачивать все объекты на 90 градусов). Любые идеи?

Должно быть выполнено динамически. Под этим я подразумеваю, что я хочу назначать разные объекты нескольким разборкам во время программы, поэтому он не может быть чем-то статическим.

Основная проблема, с которой я столкнулся до этого момента, заключается в том, что раскадровку необходимо остановить, прежде чем ее можно будет использовать снова, поэтому они не могут одновременно работать. Я думал, что если я смогу сделать временные копии раскадровки, то я могу запустить их все одновременно? Пожалуйста, дайте мне любые идеи, которые у вас есть. Заранее спасибо!

Я инициализировать свои объекты (прямоугольники) в сетке, как например:

<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"); 
} 

Проблема заключается в том, что я хочу использовать эти 4 основные раскадровки ОДНОВРЕМЕННО на целых 20 прямоугольников в время, тем самым оживляя все 20 прямоугольников в унисон. Но я не хочу, чтобы для каждого прямоугольника была назначена статическая раскадровка, потому что раскадровка, которую я хочу применить к каждому прямоугольнику, меняется каждую секунду или около того. Я также буду использовать все 4 раскадровки одновременно. (т. е. я буду использовать «oneTwo» для 3 прямоугольников, «twoThree» для 5 из прямоугольников, «twoOne» для 8 прямоугольников и «threeTwo» для 2 прямоугольников)

Я надеюсь, что все имеет смысл. Программа основана исключительно на анимации многих прямоугольников в одно и то же время, и любая помощь или предложения будут с благодарностью оценены.

+0

Как вы показываете все объекты в макете. в правильном порядке, например, в списке или в сетке или неправильно. Если вы хотите правильно показать привязку изображений к стеке и анимации –

+0

, я разместил свой код для моих прямоугольников выше, но как бы я смог оживить все объекты в стеке панели одновременно? – Jason

+0

Прошу прощения, я, должно быть, тупой или что-то, но я все еще не могу понять это. Кто-то может помочь? – Jason

ответ

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> 

Тогда имеет обязательный в ListBox с colours..refer обязательных пунктах ListBox в Интернете.

Затем с помощью кнопки нажмите кнопку «Рассказ». детальные прямоугольники раскадровки увеличивают свою ширину

FirstStoryboard.begin();

+0

Я очень хорошо знаком с Listbox, он доступен для Windows Phone 7? Поскольку Visual Studio 2010 не распознает его в xaml. – Jason