2009-06-06 23 views
2

Ich kann nicht herausfinden, was ich hier vermisse.Animierte Übergänge in WPF

Hier ist das Problem:
Betrachten Sie eine (Control | Data) Vorlage mit einem Trigger, der die Sichtbarkeit einiger innerer UI-Elemente ändert. Z.B. zeige einen TextBlock wenn IsReadOnly == true und zeige ein TextBox wenn IsReadOnly == false.

Alles ist perfekt, wenn Sie dies ohne Animation tun - ein oder zwei Setter würden die Aufgabe erledigen. Aber was, wenn Sie eine schicke Animation wünschen? Dann würden Sie angeben, welche Animationen in EnterActions und ExitActions gestartet werden sollen.

Aber das Problem ist, was genau die Animationen tun sollten? Das Ändern von Breite/Höhe scheint wirklich hässlich zu sein, da feste Größen in WPF fast immer ein falscher Weg sind und auch absolut unflexibel sind.

Das Beste, was ich bisher herausgefunden habe, ist, MaxHeight/MaxWidth etwas zu modifizieren, das gibt ein bisschen mehr Flexibilität, wirkt aber immer noch brutal.

Wie teilt man WPF mit, die Breite/Höhe eines Elements von 0 auf "so viel wie nötig" zu animieren?

UPD: Derzeit animiere ich Opazität und RenderTransform, und es funktioniert. Es ist nur so, dass ich manchmal Animationen sehen möchte, in denen Elemente ohne Transformation herumrutschen. Dies ist keine kritische Frage, aber eine ziemlich interessante für mich.

Antwort

3

Für die meisten Animationen sollten Sie entweder render transform oder opacity oder beides verwenden. Ich benutze fast nie etwas anderes.

Um Ihren Text "Grow" zu machen, animieren Sie die Skalierung einer Render-Transformation. Vergiss den Mittelpunkt nicht.

Verwenden Sie Expression Blend, um schnell zum gewünschten Effekt zu gelangen.

+0

ja, ich benutze auch RenderTransform Animationen, aber manchmal möchte ich nicht sehen, Animation von Steuerelementen wird "komprimiert" und "dekomprimiert" ... – arconaut

0

Ich denke, die beste Option ist die Opazität zu animieren: Lassen Sie den TextBlock ausbleichen, während die TextBox eingeblendet wird und umgekehrt.

1

Verwenden Sie Übergangseffekte von Blend SDK. Eine gute Erklärung zum Erstellen von benutzerdefiniertem TransitionControl, das Pixel Shader intern verwendet, finden Sie unter here.