2009-07-30 163 views
1

我想做一些我在几年前在WPF演示期间看到的东西。我不知道它是如何完成的,但我知道可以这样做,这是我的问题。通过重新排列项目的WPF ListView动画?

在演示中有一个带有很多项目的ListView或ListBox的WPF应用程序。每个ListView都被重新排序列表中的项目更改位置。但是,ListView并不仅仅是刷新,实际上还有一个动画项目移动到他们的新位置。

这个应用程序非常酷,现在这正是我需要的。我们计划做一个实时数据排名应用程序,这种动画将是完美的。

但我的团队中没有人知道如何做到这一点。我正在考虑一个ObservableCollection和Databinding,但其余的对我来说是个谜。

任何暗示或想法将是一个很大的帮助。我相信有人已经这样做了。当WPF是新的时候,我亲眼看到它,但我不知道从哪里开始寻找。

回答

4

还有可能做一个自定义面板。查理对于重写布局非常正确。要创建自定义面板,您首先必须覆盖从System.Windows.Controls.Panel继承的MeasureOverrideArrangeOverride方法。

This project CodeProject演示了一对自定义面板,您可以在其中学习如何动画。 FanPanel动画从一行的结尾移动到另一行的开头或反之亦然的项目的重新定位。

This tutorial也演示ArrangeOverride的开始动画。

我还没有尝试过,但是您也可以使用排名值以及自定义ValueConverter将排名转换为位置,以便在Canvas内驾驶这样的动画。不过,自定义面板可以更好地自包含,因此您可以更改排名数据中使用的DataTemplate,并让每个人告诉Panel他们想要的高度(假设它们是垂直排列的)。

+0

好答案;我正在寻找一个涵盖安排和度量覆盖的教程。 – Charlie 2009-07-30 19:07:12

1

我从来没有尝试过这样的事情,但我的怀疑是,至少你需要为ListView编写你自己的ViewBase。有很好的herehere的例子。真正的问题就变成了,你为动画触发器使用什么事件?试着看ItemsControl.ItemsChanged。

最终,您可能必须从ItemsControl继承并重写几个布局和排列方法才能获得此功能。即使使用WPF的超定制控件,这也不是一件容易的事情,并且需要比XAML更多的代码隐藏功能。