【问题标题】:Set StoryBoard target in datatemplate在数据模板中设置 StoryBoard 目标
【发布时间】:2011-07-26 15:39:48
【问题描述】:

当我点击按钮时,我想使用 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:Name "MyImg" 的图像对象,但我不知道如何在我的数据模板中的正确图像上设置情节提要目标。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答。我是新手,真的不知道如何在 DataTemplate 中使用 StoryBoard 并使用 VisualStateManager 启动它。你有样品吗?一个链接?
    • 看看这个问题的公认答案:stackoverflow.com/questions/3476963/… 您只需在 Pressed 状态下进行更改,然后将 Button 样式应用于 DataTemplate 中的 Button。
    • 感谢您的链接。我尝试使用 VisualState 来更改启动情节提要,但我想在单击按钮时启动它,当我使用 Expression Blend 时,我只看到我的按钮 visula stats :“Normal”、“MouseOver”、“Pressed”、“Disabled "
    • 是的,没错,但在手机上,Pressed 和 Click 几乎没有区别 :)
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2020-07-27
    • 2014-09-27
    相关资源
    最近更新 更多