6

我知道关于在 ItemsControl 中设置动画项目的类似问题已经被问到,所以如果发布了可接受的答案,那么如果我能指出正确的方向,那就太好了。

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

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

我发现了许多示例演示如何为项目的扩展设置动画,但在添加/移动/删除项目时的动画方面却不是很多。此处找到的一个示例 几乎显示了我所追求的内容,但包含了许多代码和库引用,换句话说,我认为这些引用无关紧要。我不反对合并我自己版本的类似功能。我只是希望我可以连接到事件触发器或等效项来实现相同的目标。

我没有发布任何示例代码,因为我真的对任何解决方案持开放态度,并且没有编写任何“不起作用”并且需要修复的东西。我或多或少地在寻找关于从哪里开始的意见。应用的动画类型也无关紧要,因为只要我知道如何为添加/移动/删除设置动画,我就可以修改和更改代码以适合我的偏好和整体最终效果。

4

1 回答 1

2

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

你手头有两个基本问题:

  • 你试图达到的效果的机制
  • 将该效果连接到程序的架构中

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

一旦你得到了你想要达到的效果,现在你就有了一个古老的 MVVM 问题,即让它与你的视图模型一起工作,并具有“松散耦合”。WPF 使数据绑定属性变得简单明了,因此 MVVM 是全世界数据的 MVVM。但是对于操作来说,将事件干净地连接到操作有很多障碍,而且每个 MVVM 框架似乎都有不同的做法。MVVMLight 有EventToCommandSystem.Windows.InteractivityCallMethodAction,而且还在继续。

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

于 2011-05-18T01:50:23.800 回答