动画添加/删除TreeView中的项目 - WPF

Sil*_*erX 6 c# wpf animation items mvvm

我知道在ItemsControl中有关动画项目的类似问题,所以如果已经发布了可接受的答案,那么如果我可以指向正确的方向那将是很好的.

我有一个数据绑定TreeView,其中层次结构只有一层深.它可以有X个根节点和X个子节点.然而,这是深刻的.我面临的问题是如何动画添加/移动/删除数据绑定集合中的项目的最佳方法.

TreeView的ItemContainerStyle设置为自定义ControlTemplate,以提供MouseOver和Selected样式.然后我使用HierarchialDataTemplate进一步布局绑定到它的不同类型的Item.

我发现了许多示例,演示如何动画扩展项目,但在添加/移动/移除项目时动画方面不是很多.这里找到的一个例子 显示了我正在追求的内容,但是包含了许多代码和库引用,换句话说我会考虑无关紧要.我不反对合并我自己的类似功能版本.我只是希望我可以挂钩事件触发器或等效实现相同的目标.

我没有发布任何示例代码,因为我对任何解决方案都非常开放,并且没有编写任何"不起作用"并且需要修复的东西.我或多或少都在寻找从哪里开始的意见.正在应用的动画类型也无关紧要,因为只要我知道如何动画添加/移动/删除动画,那么我可以修改和更改代码以适应我的偏好和整体最终效果.

Ric*_*key 2

因为我认为您在问“我应该如何解决这个问题?” 我可以给你一些建议。

您手头有两个基本问题:

  • 您想要达到的效果的机制
  • 将这种效果连接到程序的架构中

对于第一个问题,我建议使用简单的非 MVVM 应用程序对效果进行原型设计。特别是,您可以使用VisualStateManager您引用的链接中的想法和Animation您已经熟悉的概念以及良好的老式代码隐藏,无需复杂的库即可使树插入、运动和删除效果发挥作用。请记住,稍后您将尝试摆脱所有隐藏代码,并且这仅用于原型设计。基本上,您将该链接移植到代码隐藏并删除它使用的任何内容。

一旦你获得了你想要达到的效果,现在你就遇到了古老的 MVVM 问题,即让它以“松散耦合”的方式与你的视图模型一起工作。WPF 使数据绑定属性变得简单,因此 MVVM 就是数据领域的 MVVM。但对于操作来说,将事件与操作干净地连接起来有很多很多障碍,而且每个 MVVM 框架似乎都以不同的方式做到这一点。MVVMLight 已经EventToCommand过去了System.Windows.InteractivityCallMethodAction而且还在继续。

因此,要将您的效果与您选择的 MVVM 框架集成,请使用该框架的机制将事件连接到操作(无论是什么)。但是,如果您找不到其他方法来使粘合发挥作用,您始终可以使用一些隐藏代码来处理视图或将事件直接分派到视图模型。由你决定。