每个ListBox.ItemTemplate> DataTemplate中的不同WPF故事板动画

时间:2017-12-07 09:07:33

标签: c# wpf xaml animation itemtemplate

我想为每个ListView项目设置不同的动画。

mb_strtolower

上述XAML代码适用于为每个listitem显示相同的动画 myAnimation 。但我如何能够显示不同的动画(即我必须在Window.Resources中定义几个故事板),取决于列表项ViewModel的绑定属性

修改

随着下面的问题链接,我终于以这种方式工作了。惊人!

<Window.Resources>
    <Storyboard x:Key="myAnimation" RepeatBehavior="Forever">
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Source" Duration="0:0:2">
            <DiscreteObjectKeyFrame KeyTime="0:0:0">
                <DiscreteObjectKeyFrame.Value>
                    <BitmapImage UriSource="/img/image1.png"/>
                </DiscreteObjectKeyFrame.Value>
            </DiscreteObjectKeyFrame>
            <DiscreteObjectKeyFrame KeyTime="0:0:1">
                <DiscreteObjectKeyFrame.Value>
                    <BitmapImage UriSource="/img/image2.png"/>
                </DiscreteObjectKeyFrame.Value>
            </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

<ListBox  Name="SessionList" HorizontalContentAlignment="Stretch" >
    <ListBox.ItemTemplate>
        <DataTemplate>
           <Image x:Name="stateimage">
                <Image.Triggers>
                    <EventTrigger RoutedEvent="Loaded">
                        <BeginStoryboard Storyboard="{StaticResource myAnimation}">
                        </BeginStoryboard>
                    </EventTrigger>
                </Image.Triggers>
            </Image>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

1 个答案:

答案 0 :(得分:0)

我不确定您的模型对于此方法的可访问性如何,但您应该能够将其用于某种程度。 您可以使用一组DataTriggers,每个都继承一个故事板:

<DataTrigger Binding="{Binding Property}" Value="SomeValue">                                            
    <DataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource Storyboard}"/>
    </DataTrigger.EnterActions>
</DataTrigger>

我会在ControlTemplate

中使用它们
<ControlTemplate TargetType="Image">
    <ControlTemplate.Triggers>
        <!-- DataTriggers -->
    </ControlTemplate.Triggers>
</ControlTemplate>

修改

This Question有类似的解决方案,您可能根本不需要ControlTemplate