在datatemplate中设置StoryBoard目标

时间:2011-03-31 06:45:10

标签: c# xaml windows-phone-7 datatemplate storyboard

当我点击按钮时,我想使用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”,但我不知道如何在我的数据模板中的正确图像上设置故事板目标。

1 个答案:

答案 0 :(得分:3)

它无法解析为该名称,因为该名称是DataTemplate的本地名称。您可以在DataTemplate中移动Storyboard,以便可以将其应用于每个实例中的图像,并使用VisualStateManager以Pressed状态启动动画,或者您可以在代码中创建Storybaord并相应地设置目标。