需要只触发一次EventTrigger

时间:2015-11-06 18:51:10

标签: c# .net wpf mvvm

所以我有一个ItemsControl,其中我使用以下代码为新添加的项目设置动画:

编辑,我已根据要求添加了更多代码。

<ItemsControl Name="taskBox" ItemsSource="{Binding TaskList, Mode=OneWay}">
    <ItemsControl.Resources>
        <Storyboard x:Key="ItemEnterAnimation" AutoReverse="False">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetName="container" Storyboard.TargetProperty="(UIElement.Opacity)">
                <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1" />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimation BeginTime="00:00:00" Duration="00:00:00.3" Storyboard.TargetName="container" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)" From="-30" To="0">
                <DoubleAnimation.EasingFunction>
                    <CubicEase EasingMode="EaseOut"/>
                </DoubleAnimation.EasingFunction>
            </DoubleAnimation>
        </Storyboard>
    </ItemsControl.Resources>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <DataTemplate.Triggers>
                <EventTrigger RoutedEvent="FrameworkElement.Loaded" >
                    <BeginStoryboard Storyboard="{StaticResource ItemEnterAnimation}" />
                </EventTrigger>
            </DataTemplate.Triggers>
            <Grid Name="container">
                <Grid.RenderTransform>
                    <TransformGroup>
                        <TranslateTransform/>
                    </TransformGroup>
                </Grid.RenderTransform>
            </Grid>
        </DataTemplate>
     </ItemsControl.ItemTemplate>
</ItemsControl>

问题是某些事情可能导致基础ObservableCollection(示例中的TaskList)发送CollectionChanged(Reset)事件,导致所有元素重新加载。因此,将再次为每个项目调用输入动画

有没有办法只在首次加载项目时执行此动画?

0 个答案:

没有答案