我看到了我能想到的任何地方,但我找不到答案......
我想为Windows Phone 7(xaml和c#)制作一种模板Storyboard,然后使用该故事板以相同的方式为多个对象制作动画。 (即同时将所有物体旋转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");
}
问题是我想同时在多达20个矩形上使用这4个基本故事板,从而统一动画所有20个矩形。但我不希望为每个矩形分配一个静态故事板,因为我想要应用于每个矩形的故事板每隔一秒左右就会发生变化。我也将同时使用所有4个故事板。 (即我将对3个矩形使用“oneTwo”,对5个矩形使用“twoThree”,对于8个矩形使用“twoOne”,对于2个矩形使用“threeTwo”)
我希望一切都有道理。该程序完全基于同时动画许多矩形,任何帮助或建议将不胜感激。
答案 0 :(得分: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绑定在web中的列表框项目中进行绑定。
然后点击按钮启动故事板。故事板儿童矩形增加其宽度
FirstStoryboard.begin();