【问题标题】:(WPF) Animate ListView item move(WPF) 动画 ListView 项目移动
【发布时间】:2009-08-22 23:55:47
【问题描述】:

当 ListView 中的项目更改位置时,我希望有一个动画,因此它会慢慢移动到新位置。在模板或代码中。 我尝试从(虚拟化)StackPanel 下降并覆盖 ArrangeOverride 以重新定位和动画项目。问题是我不知道该项目在“更新之前”的哪个位置,所以我可以很好地过渡到新位置。我尝试检查项目的 TranslateTransform,存储在字典中,覆盖 OnItemChanged 并存储 OldPosition/Position .. 但没有任何工作,因为似乎总是重新创建项目(从模板)。

还有其他建议吗?

【问题讨论】:

标签: wpf listview animation


【解决方案1】:

使用 FluidMoveBehavior 行为,它会让你的生活更轻松。

您可以通过以下方式将其应用于任何项目控件

<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 中找到此行为

【讨论】:

  • 你有 FluidMoveBehavior 文档的链接吗?我似乎找不到任何东西。
  • 有限的类文档可以在随 Blend 3 一起安装的 Expression Blend SDK 用户指南中找到
  • 感谢所有答案..这种带有行为的方法看起来不错,但问题是所有项目都被重新创建,因此所有项目都被动画定位(从顶部)。同样的问题适用于所有其他解决方案。我会考虑改用 DataGrid,因为它似乎还有其他一些我想要的东西。
  • 可以一直等到列表填充完毕后再附加行为
【解决方案2】:

事实上,这个问题早在 2006 年就被 Dan Crevier 完美解决了。看看他的 PanelLayoutAnimator 课程。

【讨论】:

  • +1。我刚刚查看了这篇文章——它涉及一个类,代码示例很容易理解,使用它只涉及向 XAML 添加一个属性,结果看起来不错。推荐。
猜你喜欢
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多