WPF MVVM-Eigenschaft Animation ändern

8

Ich suche nach einem sauberen Weg, um eine Animation mit dynamischen Werten zu starten. Im Grunde möchte ich eine Animation machen, bei der ein Element die Breite basierend auf den Daten eines anderen Elements ändert. Angenommen, ich habe einen TextBlock, dessen Texteigenschaft bindend ist. Wenn sich diese Eigenschaft ändert, möchte ich ein visuelles Element sagen, ein Rectangle, um eine DoubleAnimation zu machen, die die Breite vom vorherigen Wert zum neuen Wert ändert.

Ich versuche, Code zu vermeiden, wenn es möglich ist. Ich habe DataTriggers betrachtet, aber sie scheinen zu verlangen, dass Sie wissen, wie der Wert sein würde, wie ein Enum. In meinem Fall ist es nur die Wertänderung, die ein Storyboard auslösen muss, und die Animation muss mit dem aktuellen (vorherigen) Wert beginnen und sich gut auf den neuen Wert bewegen.

Irgendwelche Ideen. Vielleicht habe ich gerade eine Immobilie vermisst.

    
cjibo 30.10.2009, 13:31
quelle

4 Antworten

13

Hier ist die Lösung, mit der ich endete. Um die Animation basierend auf Daten in meinem ViewModel durchzuführen, habe ich einen DataTrigger verwendet. Unten ist mein Style für die Steuerung.

%Vor%     
cjibo 04.11.2009, 18:13
quelle
1

Sie können die angefügten Eigenschaften verwenden, um die erforderliche Logik mit dem Storyboard / der Animation zu verknüpfen das du begehrst.

Das wird Sie nicht unbedingt davon abhalten, Code zu schreiben, aber es wird es von der Ansicht getrennt halten und erlauben, dass es über mehrere Ansichten wiederverwendet werden kann.

    
Richard McGuire 30.10.2009 16:50
quelle
0

Da durch Animation veränderte Eigenschaften nicht außerhalb des Animationskontexts festgelegt werden können, habe ich eine Codelösung entwickelt, da ich das in XAML nicht effektiv machen konnte.

%Vor%     
NickV 11.01.2012 18:40
quelle
0

Eigentlich möchten Sie DoubleAnimation.ToProperty an die Eigenschaft ViewModel binden und das aktuelle Steuerelement animieren. Das Problem ist, dass die Animation fortgesetzt werden sollte, wenn ToProperty geändert wurde. Meine Lösung kapselt all diese Logik in ein MarkupExtenstion , das ein Binding umschließt.

%Vor%

Sie können das gleiche mit anderen Animationsklassen tun, um andere Typen zu animieren.

    
alrz 18.12.2014 13:16
quelle

Tags und Links