Установите цель 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: Name «MyImg», но я не знаю, как установить цель раскадровки на правильное изображение в моем шаблоне данных.


person TheFrancisOne    schedule 31.03.2011    source источник


Ответы (1)


Это имя не может быть разрешено, потому что это имя является локальным для DataTemplate. Вы можете либо переместить Storyboard в DataTemplate, чтобы его можно было применить к изображению в каждом экземпляре, и использовать VisualStateManager для запуска анимации в состоянии Pressed, либо вы можете создать Storybaord в коде и соответствующим образом установить цель.

person Derek Lakin    schedule 31.03.2011
comment
Спасибо за ваш ответ. Я новичок и действительно не знаю, как использовать StoryBoard в DataTemplate и запускать его с помощью VisualStateManager. У вас есть образец? ссылка ? - person TheFrancisOne; 31.03.2011
comment
Взгляните на принятый ответ на этот вопрос: stackoverflow.com/questions/3476963/ Вам просто нужно внести изменения в состояние "Нажато", а затем применить стиль кнопки к кнопке в вашем Шаблон данных. - person Derek Lakin; 31.03.2011
comment
Спасибо за ссылку. Я пытаюсь использовать VisualState для изменения запуска раскадровки, но я хотел бы запускать его при нажатии кнопки, и когда я использую Expression Blend, я вижу только статистику визуальной кнопки: Normal, MouseOver, Pressed, Disabled - person TheFrancisOne; 31.03.2011
comment
Да, правда, но на телефоне очень мало разницы между Pressed и Click :) - person Derek Lakin; 31.03.2011