Wpf 淡出从itemscontrol中删除项目
我有一个带有ItemsControl的WPF视图,它绑定了来自ViewModel的ObservableCollection。现在我想慢慢淡出我从ObservaleCollection中移除的项目 视图模型:Wpf 淡出从itemscontrol中删除项目,wpf,datatemplate,eventtrigger,Wpf,Datatemplate,Eventtrigger,我有一个带有ItemsControl的WPF视图,它绑定了来自ViewModel的ObservableCollection。现在我想慢慢淡出我从ObservaleCollection中移除的项目 视图模型: public class ViewModel { public ObservableCollection<string> Items { get; set; } } 公共类视图模型 { 公共ObservableCollection项{get;set;} } 视图:
public class ViewModel
{
public ObservableCollection<string> Items { get; set; }
}
公共类视图模型
{
公共ObservableCollection项{get;set;}
}
视图:
我现在的问题是,故事板从集合中移除一个项目开始,但同时itemscontrol移除该项目,因此动画不在视线中
知道如何防止在动画终止前删除该项吗?这比它应该的困难得多。“删除”动画的问题在于,一旦从数据绑定集合中删除了一个项,其相应的视觉效果就会自动从元素树中删除。这意味着没有什么可以设置动画了 要解决此问题,您需要找到一种方法,在从数据绑定集合中删除项之前对动画进行排队,并且在动画完成后,通知ViewModel可以删除该项 另一种解决方案是修改ItemsControl的行为,以更好地控制容器视觉效果的生存期
不管怎样,这都不是一项需要完成的琐碎任务。谢谢您的回答!我认为在xaml中可能有一种更简单的方法,但我将尝试上述方法。有关淡入和淡出动画,请参见以下内容:
<Window x:Class="Sandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"
Name="mainWindow">
<Window.Resources>
<DataTemplate x:Key="mytemplate">
<DataTemplate.Resources>
<Storyboard x:Key="OnUnloaded">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="grid">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-10"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</DataTemplate.Resources>
<Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
<TextBox Text="{Binding Mode=OneWay}"/>
</Grid>
<DataTemplate.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Unloaded">
<BeginStoryboard Storyboard="{StaticResource OnUnloaded}"/>
</EventTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ItemsControl Grid.Row="1" ItemsSource="{Binding Items}" ItemTemplate="{StaticResource mytemplate}"/>
</StackPanel>