9

Silverlight コントロールにグリッドを作成し、プログラムでキャンバスを追加し、キャンバスに Image を読み込んで表示しています。

また、キャンバスに回転を追加しています。問題は、デフォルトで回転の CenterX と CenterY がキャンバスの左上になることです。私が望むのは、キャンバスの中心を中心に回転することです。

これを行うために、Rotation の CenterXとCenterY を Images ActualWidth/ 2 とActualHeight/ 2 に設定しようとしましたが、少なくともすぐには読み込まれないことがわかりました。それらを強制的に更新するにはどうすればよいですか?ActualWidthActualHeight

画像で DownloadProgress イベントを使用しても、ActualWidth と ActualHeight が設定されることは保証されないようです。

Image imgTest = new Image();
Canvas cnvTest = new Canvas();
Uri uriImage = new Uri("myurl", UriKind.RelativeOrAbsolute);
System.Windows.Media.Imaging.BitmapImage bmpDisplay = new System.Windows.Media.Imaging.BitmapImage(uriImage);

bmpDisplay.DownloadProgress += new EventHandler<System.Windows.Media.Imaging.DownloadProgressEventArgs>(this.GetActualDimensionsAfterDownload);

imgTest.Source = bmpDisplay;
imgTest.Stretch = Stretch.Uniform;
imgTest.HorizontalAlignment = HorizontalAlignment.Center;
imgTest.VerticalAlignment = VerticalAlignment.Center;

cnvTest.Children.Add(imgTest);

this.grdLayout.Children.Add(imgTest);
this.Dispatcher.BeginInvoke(new Action(GetActualDimensions)); 
4

3 に答える 3

14

aのActualWidthandを更新するには、を呼び出す必要があります。ActualHeightFrameworkElementUpdateLayout

于 2009-08-10T20:11:03.863 に答える
3

残念ながら、状況によっては、updateLayoutの呼び出しも常に機能するとは限りません。

私は次のようなことをするほうが幸運でした:

whateverUIElement.Dispatcher.BeginInvoke(()
  {
   //code that needs width/height here
  }
);

しかし、それでも失敗することが多すぎます。

于 2010-08-05T21:14:04.663 に答える