2010-06-07 8 views
5

Ich habe eine Situation, in der ich Teil meiner XAML-Anwendung animiere, und ich muss auf die Animation UND Rendering warten, bevor ich in meinem Code weitermachen kann. Bis jetzt sieht das Ende meiner Funktion wie folgt aus:Warte auf Animation, Render zu vervollständigen - XAML und C#

Welches in der Theorie warten wird, bis die Animation beendet ist. Aber es wird nicht warten, bis das Rendering beendet ist - der Thread, der die Anwendung gezeichnet hat, hat die Animation möglicherweise noch nicht neu gezeichnet.

Die Animation erweitert ein UIElement, und dann verwendet der nächste Teil meines Codes seine gerenderte Größe, um einige Dinge zu tun. Meine Frage ist dann, wie kann ich warten, bis mein UI-Element neu gerendert wird, bevor es weitergeht?

Antwort

6

fand ich endlich eine Antwort (obwohl ich für Beratungsleistungen zu zahlen hatte)! Im Wesentlichen habe ich das Code-Bit, das die gerenderten Steuerelemente in der Warteschlange des Steuerungs-Dispatchers verwendet, mit sehr niedriger Priorität gesetzt, so dass es vor der Verarbeitung dieser Aufgabe natürlich gerendert wird. Zum Beispiel:

mycontrol.Dispatcher.BeginInvoke((Action)delegate{textbox1.Text = "Grazie";}); 
mycontrol.Dispatcher.Invoke((Action)delegate{GetScreenshot();}, DispatcherPriority.Background); 

Der Code wird dann, verfahren nach GetScreenshot aufgerufen und beendet, die nach dem Rendering abgeschlossen ist wird (weil Rendering höhere Priorität als Hintergrund hat).

0

Das Storyboard-Objekt hat ein "Completed" -Ereignis, das Sie abonnieren können. Es wird aufgerufen, wenn die Animation fertig ist. Das, wonach Sie suchen?

Grundsätzlich denke ich, Sie wollen „ProcExpandCollapse.Completed + =“ (dann auf das Register traf ein Blick mal, VS wird ein Ausschnitt für Sie generieren)

+1

Nein, ich warte, bis das * Rendering * abgeschlossen ist. –