Erzwingen, dass ActualWidth und ActualHeight aktualisiert werden (silverlight)

8

Ich habe ein Raster auf meiner Silverlight-Steuerung, ich füge programmatisch eine Leinwand hinzu, und in der Leinwand lade ich Bild ein und zeige es an.

Ich füge auch eine Drehung zur Leinwand hinzu. Das Problem besteht darin, dass das CenterX und CenterY der Rotation standardmäßig oben links im Canvas angeordnet ist. Was ich will, ist die Rotation um die Mitte der Leinwand.

Dafür habe ich versucht, CenterX und CenterY der Rotation auf die Bilder ActualWidth / 2 und ActualHeight / 2 zu setzen, allerdings habe ich festgestellt, dass ActualWidth und ActualHeight nicht immer sind bevölkert, zumindest nicht sofort. Wie kann ich sie zwingen, aktualisiert zu werden?

Selbst wenn das DownloadProgress-Ereignis auf dem Bild verwendet wird, scheint es nicht zu garantieren, dass die ActualWidth- und ActualHeight-Werte aufgefüllt werden, und auch nicht, dass this.Dispatcher.BeginInvoke () ...

verwendet wird %Vor%     
Jeremy 10.08.2009, 20:01
quelle

3 Antworten

13

Um ActualWidth und ActualHeight von FrameworkElement zu aktualisieren, müssen Sie UpdateLayout aufrufen.

    
Martin Liversage 10.08.2009 20:11
quelle
3

Leider funktioniert der Aufruf von updateLayout abhängig von Ihrer Situation nicht immer.

Ich hatte mehr Glück, etwas wie:

zu tun %Vor%

aber selbst das scheitert zu oft.

    
dethSwatch 05.08.2010 21:14
quelle
0

Die zuverlässigste Methode, die ich gefunden habe, ist die Verwendung von DependencyPropertyDescriptor AddValueChanged Listenern von ActualWidth und ActualHeight anstelle von OnLayoutUpdated , um Elementgrößen nach dem Rendern zu erhalten

%Vor%

Verwenden Sie anstelle von StackPanel, Grid usw. das Basiselement, auf das Sie für die relativen Größen angewiesen sind

    
Evalds Urtans 17.06.2014 10:21
quelle