Почему моя раскадровка внутри DataTemplate не начинается? - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть пользовательский нарисованный элемент управления Path с несколькими текстовыми блоками внутри, составляющими DataTemplate в Silverlight 4. Я использовал окно Animation в Expression Blend, чтобы создать простую анимацию, которую я могу «воспроизвести» и увидеть работу OK в Blend.

Я хочу, чтобы эта анимация запускалась при событии '_MouseEnter ()' (VB.NET). Я хочу запустить метод .Begin для анимации.Кажется, достаточно просто.

Однако во время выполнения ничего не происходит.Я помещаю точку останова в событие _MouseEnter и, конечно же, она входит в событие при входе мыши в элемент управления, запускает строку кода, чтобы начать анимацию, но ничего не происходит.Никаких исключений, никакой анимации, ничего.

Может кто-нибудь сказать мне, что мне здесь не хватает, так как я знаю, что настоящая анимация работает , она просто не работает во время выполнения?XAML и событие приведены ниже (удалены некоторые свойства стиля в Texblocks и т. Д., Чтобы их было легче читать):

    <DataTemplate x:Key="MyItemTemplate">
        <Grid Width="50"  Height="80" Opacity="0.9"
            RenderTransformOrigin="0.5,0.5" 
            ToolTipService.ToolTip="{Binding ItemName}">            

            <Grid.Resources>
                <Storyboard x:Name="MyItemTemplateAnimate">
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[4].(GradientStop.Offset)" 
                            Storyboard.TargetName="path">
                                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.296"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="0.384"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0.475"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="0.529"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:0.7" Value="0.587"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0.652"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="0.582"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.523"/>
                                <EasingDoubleKeyFrame KeyTime="0:0:1.1" Value="0.5"/>
                    /DoubleAnimationUsingKeyFrames>
                </Storyboard>
            </Grid.Resources>

            <Grid.RenderTransform>
                <CompositeTransform Rotation="180"/>
            </Grid.RenderTransform>

            <Path x:Name="path" Data="M 0,0 L 50,0 50,50 25,80 0,50 0,0" Stroke="Wheat" StrokeThickness="2">
                <Path.Fill>
                    <LinearGradientBrush EndPoint="-0.419,0.662" MappingMode="RelativeToBoundingBox" StartPoint="1.051,-0.137">
                        <GradientStop Color="#FF250A0A" Offset="1"/>
                        <GradientStop Color="#FF250A0A"/>
                        <GradientStop Color="#FF501616" Offset="0.725"/>
                        <GradientStop Color="#FF501616" Offset="0.275"/>
                        <GradientStop Color="#FF9F4C4C" Offset="0.5"/>
                    </LinearGradientBrush>
                </Path.Fill>
            </Path>

            <TextBlock x:Name="TextBlock1"                              
            </TextBlock>
            <TextBlock x:Name="TextBlock2"
            </TextBlock>                                    
        </Grid> 
    </DataTemplate>

Код, который использует DataTemplate:

<m:MapItemsControl x:Name="MyItems" ItemTemplate="{StaticResource MyItemTemplate}"/>

А вотсобытие VB.NET:

Private Sub MyItems_MouseEnter(sender As Object, e As System.Windows.Input.MouseEventArgs) Handles MyItems.MouseEnter                  

      MyItemTemplateAnimate.Begin()
End Sub

Ответы [ 3 ]

0 голосов
/ 23 сентября 2011

Правильны ли раскадровки TargetProperty, потому что там вы используете GradientBrush, но на вашем пути у вас есть LinearGradientBrush.Просто дикая догадка.:)

0 голосов
/ 24 сентября 2011

Я понял это:

Начало анимации StoryBoard в шаблоне данных в Silverlight:
http://allen -conway-dotnet.blogspot.com / 2011/09 / начать-раскадровки-анимация-within.html

0 голосов
/ 23 сентября 2011

Поскольку ваша раскадровка находится в ItemTemplate, для каждого предмета будет одна раскадровка.Поэтому я не уверен, почему вы не получаете исключение, но я считаю, что это проблема области имен.

Если ваша анимация связана с отдельными элементами, почему бы не запустить ее, когда мышь наводится на элемент?сам вместо itemscontrol?

...