WPF Animation startet, zeigt aber zu spät

8

Ich erstelle einige WPF-Steuerelemente mit .Net 4.0. Eines dieser Steuerelemente, LoadPane genannt, ist ein benutzerdefiniertes Steuerelement, das von ContentControl abgeleitet wird. Der einzige Job dieses LoadPane-Steuerelements besteht darin, eine halbtransparente Ebene über dem darin enthaltenen Inhalt anzuzeigen, wenn die IsLoading-Eigenschaft auf "true" gesetzt ist. Ich verwende einige Animationen zum Einblenden und Ausblenden, wenn sich der IsLoading-Wert ändert. Wenn das Overlay angezeigt wird, rotiert eine Animation einen Ellipsenkreis.

So weit, so gut. Das alles funktioniert sehr gut. Aber hier ist mein Problem: Wenn ich die Loading-Eigenschaft auf true setzen, wird die Animation nicht direkt angezeigt. Es dauert etwa eine halbe Sekunde. In dieser Zeit ist die Fade-In-Animation bereits ausgeführt worden, so dass die Opazität in einem Schritt effektiv von 0 auf 1 geht.

Hier ist mein Animationscode:

%Vor%

Das Seltsame ist, wenn ich dieses Steuerelement in einem Testfenster verwende und das Kontrollkästchen "Laden" wiederholt anklicke (und bevor die Animation beendet ist), dann funktioniert die Ein- / Ausblend-Animation so, wie ich es erwarte .

Kann jemand helfen? Danke im Voraus!

    
RogierBessem 26.05.2011, 08:05
quelle

2 Antworten

0

Ich habe es endlich herausgefunden, nachdem ich Isaks Antwort gelesen habe. Es tut mir leid zu sagen, dass seine Antwort in meinem Fall nicht geholfen hat, aber er brachte mich in die richtige Richtung.

Der Grund, warum die erste Einblendung nicht zu funktionieren schien, war, dass meine Sichtleiste auf die gesamte Dauer der Fade-In-Animation reduziert war. Dies wurde durch die ObjectAnimationUsingKeyFrames verursacht:     

%Vor%

Es wurde keine Dauer angegeben und der angegebene einzelne Keyframe wurde zu spät animiert.

Hinzufügen

%Vor%

hat mein Problem gelöst.

Danke euch allen!

    
RogierBessem 01.06.2011, 10:13
quelle
3

Es ist schwer zu sehen, was genau das Problem ist, ohne den Rest des Codes zu sehen, aber meine Vermutung ist, dass es mit den Startwerten der animierten Eigenschaften zu tun hat.

Ich habe ein benutzerdefiniertes Steuerelement in WPF mit einem Rechteck in einer Viewbox implementiert und die Auslöser + Storyboards der Frage verwendet, um den Effekt zu sehen. In der Tat, mein erster Versuch verblasste nicht und verblasste nicht.

Was ich getan habe, um es zu lösen, war die Angabe von From -Werten in den Animationen, so dass sie unabhängig vom ursprünglichen Wert der DP funktionieren:

%Vor%

Beachte From="0" in der obigen Animation. Das End-Storyboard wurde genauso modifiziert, um von 1 auf 0 zu wechseln.

Der Vollständigkeit halber habe ich die Deckkraft auf 0 für die Definition des Viewbox-Elements in der ControlTemplate gesetzt.

Hier ist der vollständige Quellcode für die relevanten Teile. Das Steuerelement ist ein benutzerdefiniertes WPF-Standardsteuerelement, das von Control erbt. Es hat eine einzige Abhängigkeitseigenschaft namens IsLoading ( bool ), die standardmäßig auf false :

gesetzt ist %Vor%

ControlTemplate - Definiert in generic.xaml im Stil für {x:Type local:LoadingControl}

%Vor%

Ich habe es in meinem Hauptfenster so verwendet:

%Vor%

Und um es zu testen, hatte ich ein ViewModel mit einer Eigenschaft IsLoading , die als DataContext für das Hauptfenster gesetzt wurde. Und im Konstruktor des ViewModel setze ich IsLoading auf true und starte dann einen Timer, der den Wert der Eigenschaft alle 5 Sekunden umschaltet:

%Vor%     
Isak Savo 31.05.2011 13:49
quelle

Tags und Links