2009-04-29 6 views
7

Ich habe WPFToolkit heruntergeladen, und ich verwende das DataGrid in diesem Paket zur Verfügung gestellt. Ich versuche das Verschwinden einer Zeile zu animieren, wenn die Zeile entfernt wird, aber ich weiß nicht, wie ich es machen soll. Weiß jemand wie es geht?Animate Reihe Verschwinden in WPFToolKit DataGrid

Antwort

2

Dies ist die Art von Sache, die in WPF schwierig sein kann - obwohl Ihr Chef wird denken, dass es einfach sein sollte - da WPF Animation und auffällige visuelle Effekte ermöglichen soll. Immerhin gibt es alle Arten von tollen Silverlight/WPF Demos im Web, die gut aussehen und die Tech wirklich verkaufen. Was dein Chef natürlich nicht weiß, ist, dass diese Demos nur geschrieben wurden, um die einfachen, auffälligen Features zu zeigen. Dinge, die ein bisschen anders als Standard sind, haben jedoch eine unangenehme Art, sehr schwierig zu sein.

Aber genug schimpfen, ich werde Ihnen einen möglichen Ansatz geben, obwohl es eine viel bessere sein kann:

Nehmen wir an, Sie haben das Datagrid zu einer Art Sammlung gebunden, und für Zwecke der Beweisführung lasst uns nehme an, es ist eine Liste von Foo Objekten, dh List<foo> MyFoos. Dann könnten Sie der FOO-Klasse BeingDeleted eine Eigenschaft hinzufügen. Dann lösen Sie in der Vorlage für Ihre DataRowView einen Trigger für diese Eigenschaft aus, um ein Storyboard zu beginnen, das eine Ausblendung oder einen Zusammenbruch dieser bestimmten Zeile animiert. Das ist etwas eklig, da es bedeutet, dem Foo-Objekt eine Eigenschaft hinzuzufügen, die sonst nichts damit zu tun haben könnte. Sie könnten alternativ einen speziellen Wrapper oder eine Unterklasse von Foo erstellen.

+0

So entschied ich mich schließlich, dies zu implementieren. Es gab einige Probleme mit der Synchronisierung der gebundenen Liste (da der Synchronizer die "fast gelöschten" Elemente ignorieren sollte), und ich musste diese Elemente auch wirklich löschen, wenn die Animation vorbei ist. Das Endergebnis ist irgendwie chaotisch (alles ist eng gekoppelt), aber ich denke, es gibt keine andere Lösung. – Andy