在datatemplate中设置StoryBoard目标
问题描述:
我想用StoryBoard在平面投影动画中显示图像时,我点击一个按钮。在datatemplate中设置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并相应地设置目标。
谢谢你的回答。我是新手,并不知道如何在DataTemplate中使用StoryBoard并使用VisualStateManager启动它。你有样品吗?一条链接 ? – TheFrancisOne 2011-03-31 08:37:02
看看这个问题的接受答案:http://stackoverflow.com/questions/3476963/windows-phone-7-wp7-change-a-buttons-background-color-on-click你只需要您在按下状态中的更改,然后将按钮样式应用于DataTemplate中的按钮。 – 2011-03-31 08:50:56
感谢您的链接。我尝试使用VisualState更改启动故事板,但是我想在点击按钮时启动它,当我使用Expression Blend时,我只能看到我的按钮visula stats:“Normal”,“MouseOver”,“Pressed”,“Disabled “ – TheFrancisOne 2011-03-31 15:49:41