2009-07-30 165 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更多的代碼隱藏功能。