淡出从itemscontrol中删除项目
-
25-10-2019 - |
题
我有一个带有itemScontrol的WPF视图,该项目构成了从ViewModel绑定观察力的。现在,我想淡出慢慢从ObservableCollection中删除的项目。
ViewModel:
public class ViewModel
{
public ObservableCollection<string> Items { get; set; }
}
看法:
<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>
我现在遇到的问题是,故事板从收藏集中删除项目开始,但与此同时,ItemScontrol删除了该项目,为此,动画看不到...
任何想法如何防止动画终止之前删除该项目?
解决方案
这比应有的难度要困难得多。 “删除”动画的问题是,一旦从数据库集合中删除项目,就会自动从元素树中删除其相应的视觉效果。这意味着没有什么可以动画的。
要围绕它,您需要找到一种方法来排队动画,然后才能从数据库集合中删除项目,并且一旦动画完成,请通知ViewModel,可以删除该项目。
另一个解决方案是修改ItemScontrol的行为,以更好地控制容器视觉效果的寿命。
无论哪种方式,不幸的是,要完成的任务不是一项琐碎的任务。
不隶属于 StackOverflow