2009-07-30 8 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を変更し、それぞれが(垂直に配置されていると仮定して)どれくらいの高さになるかを教えさせることができます。

+0

私はアレンジメントとメジャーオーバーライドを扱うチュートリアルを探していました。 – Charlie

1

私はこのような試みは一度もしていませんが、少なくとも、ListViewのために自分でViewBaseを書く必要があります。その優れた例はherehereです。実際の問題は、あなたのアニメーショントリガーにどのようなイベントを使用しますか? ItemsControl.ItemsChangedを見てみてください。

最終的には、ItemsControlから継承し、いくつかのレイアウトをオーバーライドして、この機能を実現するためのメソッドを配置する必要があります。 WPFの超カスタマイズ可能なコントロールでも、これは簡単な作業ではなく、XAMLよりも多くのコードビハインドを必要とします。

関連する問題