C# 只需触发一次事件
因此,我有一个ItemsControl,其中我使用以下代码为新添加的项目设置动画: 编辑,我已根据要求添加了更多代码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 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。请查看是否使用数据触发器而不是事件触发事件。