当我点击按钮时,我想使用StoryBoard来显示带有平面投影动画的图像.
当我在一个实例上尝试它时,这是有效的.
但是在我的silverlight页面(windows phone 7)中,我使用数据模板从一组对象中重复它.
在这里,它不起作用.
这是数据模板的.xaml:
<DataTemplate x:Name="MyDt">
<Button Tag="{Binding iId}" BorderThickness="0" Click="buttonClick" Width="456" Style="{StaticResource ButtonStyle}">
<Image x:Name="MyImg" Source="Images/image.png" Visibility="Collapsed">
<Image.Projection>
<PlaneProjection/>
</Image.Projection>
</Image>
</Button>
</DataTemplate>
这是故事板的.xaml(在电话页面资源中):
<Storyboard x:Name="storyboardShowImage">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="">
<EasingDoubleKeyFrame KeyTime="0" Value="90"/>
<EasingDoubleKeyFrame KeyTime="00:00:01" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
这是按钮上的.cs点击事件:
private void buttonClick(object sender, RoutedEventArgs e)
{
/* Get image object from x:Name */
Image img;
img = GetChildImage((DependencyObject)sender, "MyImg");
/* Launch storyboard on img object */
((DoubleAnimationUsingKeyFrames)storyboardShowImage.Children[0]).SetValue(Storyboard.TargetNameProperty, img.Name);
storyboardShowImage.Begin();
}
但我得到错误:
Cannot resolve TargetName MyImg.
我认为这是因为有多个具有x的图像对象:名称为“MyImg”,但我不知道如何在我的数据模板中的正确图像上设置故事板目标.
解决方法:
它无法解析为该名称,因为该名称是DataTemplate的本地名称.您可以在DataTemplate中移动Storyboard,以便可以将其应用于每个实例中的图像,并使用VisualStateManager以Pressed状态启动动画,或者您可以在代码中创建Storybaord并相应地设置目标.