Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 只需触发一次事件_C#_.net_Wpf_Mvvm - Fatal编程技术网

C# 只需触发一次事件

C# 只需触发一次事件,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,因此,我有一个ItemsControl,其中我使用以下代码为新添加的项目设置动画: 编辑,我已根据要求添加了更多代码 <ItemsControl Name="taskBox" ItemsSource="{Binding TaskList, Mode=OneWay}"> <ItemsControl.Resources> <Storyboard x:Key="ItemEnterAnimation" AutoReverse="False">

因此,我有一个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任务列表发送CollectionChangedReset事件,从而导致所有元素重新加载。因此,将再次为每个项目调用enter动画


是否有办法在首次加载项目时仅执行一次此动画?

是否有可能在发生某些情况时将布尔标志设置为false?然后,您可以使用flag作为情节提要事件的触发器。如何使触发器有条件?也就是说,在XAML中,在FrameworkElement.Loaded之后,如果条件为false,我会怎么说?我想你应该用另一种方式来做。某些事情发生时,事件会将标志设置为false。我不确定我是否理解。当项目添加到ItemsControl中时,情节提要事件正在发生,这无法更改,我不希望从视图模型手动触发情节提要,因为这会中断MVVM。请查看是否使用数据触发器而不是事件触发事件。