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% Um ActualWidth
und ActualHeight
von FrameworkElement
zu aktualisieren, müssen Sie UpdateLayout
aufrufen.
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.
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
Tags und Links silverlight actualwidth actualheight