2012-10-21 4 views
0

이미지를 Image 인스턴스로 포함 리소스에서로드하려고합니다. 내가 상쇄해야하기 때문에, 나는 그것이 화면에 렌더링하기 전에 이미지의 크기를 알 필요가이미지 크기는 항상 0을 반환합니다.

Image image = new Image(); 
ImageSource img = new System.Windows.Media.Imaging.BitmapImage(new Uri("/Images/marker.png", UriKind.Relative)); 
image.SetValue(Image.SourceProperty, img); 


System.Diagnostics.Debug.WriteLine("output 1 = " + image.DesiredSize.Width); // return 0 
System.Diagnostics.Debug.WriteLine("output 2 = " + image.ActualWidth); // return 0 

: 문제는 이미지의 크기가 여기에 항상 0

인 코드입니다 이미지는 크기에 따라 다릅니다. 귀하의 확인 여기에이입니다입니다 - 감사 Silvermind 내가 샘플 코드

+0

그것이 UI에 렌더링되기 전에 그것은 더'DesiredSize'가 없습니다 :

마지막으로, 나는 해결책을 찾아 냈다. – Silvermind

+0

UI에 렌더링하기 전에 이미지 크기를 가져올 수 있습니까? –

+0

컨트롤의 크기를 가져 오는 것은 렌더링 전에 실제로 수행 할 수 없습니다. http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.actualwidth(v=vs.95).aspx Silverlight에서는 HorizontalAligment 등을 사용하여 자동 위치를 생각할 때, 아마도 당신이 달성하고자하는 것을 알려주는 것이 낫습니다. – Silvermind

답변

0

감사 인사 Silvermind. 그는 CreateOptions를 사용하도록 제안했습니다.

Image image = new Image(); 

Uri uri = new Uri("/Images/marker_stop.png", UriKind.Relative); 
BitmapImage bi = new BitmapImage(uri); 
bi.CreateOptions = BitmapCreateOptions.IgnoreImageCache; 

image.Source = bi; 
System.Diagnostics.Debug.WriteLine("************************************* in image.ActualWidth " + ", " + bi.PixelWidth); // return 30 
1

"/Images/marker.png"내 자신의 질문에 대답

:



업데이트 감사 파일?

어쩌면 폴더 이름이 대문자가 아니기 때문일 수 있습니다.

는 무엇이 반환

image.getValue(); // here what null? after setting it 
+0

화면에서 렌더링 할 수 있기 때문에 이미지 경로가 정확하다고 확신합니다. –

2

BitmapImage.DownloadProgress Event 보면;

URI로 BitmapImage를 구성하는 것은 기본적으로 비동기식입니다. 이 이벤트는 진행 상황을보고합니다. BitmapImage 전에 ActualWidth을 실행 즉

는 반드시/다운로드 잘 ActualWidth 0을 반환 할 수 있습니다 구성되어 있습니다.

관련 문제