我希望在ListView中的项目更改位置时有动画,因此它会慢慢移动到新位置。在模板或代码中。 我尝试从(虚拟化)StackPanel下载并重写ArrangeOverride来重新定位和动画项目。问题是我不知道该项目在更新之前的位置,所以我可以很好地过渡到新的位置。我尝试检查项目的TranslateTransform,存储在字典中,覆盖OnItemChanged并存储OldPosition / Position ..但没有一个工作,因为它似乎总是重新创建项目(来自模板)。
还有其他建议吗?
答案 0 :(得分:6)
使用FluidMoveBehavior行为,它将使您的生活更轻松。
您可以按以下方式将此内容应用于任何itemscontrol
<ItemsPanelTemplate x:Key="ItemsPanelTemplate">
<WrapPanel>
<i:Interaction.Behaviors>
<il:FluidMoveBehavior AppliesTo="Children" Duration="00:00:00.75"/>
</i:Interaction.Behaviors>
</WrapPanel>
</ItemsPanelTemplate>
您可以在与Blend 3一起安装的Microsoft.Expression.Interactions.dll中找到此行为
答案 1 :(得分:1)
事实上,Dan Crevier在2006年完全解决了这个问题。请查看他的PanelLayoutAnimator课程。
答案 2 :(得分:0)
我意识到这并不完全是你所追求的,但是如果你找不到更好的东西,你可以看看Josh Smith的文章http://joshsmithonwpf.wordpress.com/2007/03/13/animated-filtering-of-listboxitems/
答案 3 :(得分:0)
@rravuri回答对我有用,你必须定义为动态资源,你可以直接申请然后调用它likethis ItemsPanel =“{DynamicResource ItemsPanelTemplate}”