2011-09-18 68 views
1

我有一個Image控件,在運行時生成。顯示時呈現正確的大小。但我無法得到這個元素的大小。 WidthHeight是NaN。 ActualWidthActualHeight始終爲0.0,並且控件永遠不會觸發事件SizeChanged事件。我無法獲取UIElement的實際大小

enter image description here

我也產生在運行文本框,我不能讓他們的規模太大。

生成圖像的代碼如下所示。

ExtendedImage image = new ExtendedImage(); 
image.Name = "element" + item.Id; 
if (item.Text.ToUpperInvariant().EndsWith(".GIF")) 
{ 
    var gif = BookReader.Imaging.GIFDecoder.Decode(Application.GetResourceStream(new Uri("Files/Books/" + item.BookId + "/" + item.Text, UriKind.Relative)).Stream); 
    image.Source = gif.Frames[0].Image; 
} 
else 
{ 
    var img = new BitmapImage(new Uri("/Files/Books/" + item.BookId + "/" + item.Text, UriKind.Relative)); 
    image.Source = img; 
} 

image.SetValue(Canvas.LeftProperty, (double)item.LocationX); 
image.SetValue(Canvas.TopProperty, (double)(Application.Current.Host.Content.ActualHeight - item.LocationY)); 

image.SizeChanged += (o, e) => 
{ 
    var sender = o as ExtendedImage; 
    image.SetValue(UIElement.RenderTransformOriginProperty, new Point(0.5, 0.5)); 
}; 

image.InvalidateMeasure(); 

if (!item.Visible) 
{ 
    image.Visibility = System.Windows.Visibility.Collapsed; 
} 

ContentPanel.Children.Add(image); 

回答

1

如果Image的容器具有HeightWidth,圖像應該有它。嘗試將您的Image放入GridStackPanel並明確設置大小。

+0

它包含在畫布中,並且畫布具有高度和寬度。 –

+0

感謝您的回答。 Canvas容器的大小是NaN。當我修復這個問題時,我的問題就解決了。 –

+0

你能告訴我你是如何解決你的問題的,我也有同樣的問題。 –

3

在渲染之前,您無法訪問圖像的大小。如果沒有明確的尺寸,則無法渲染Canvas中的項目。

所以你的問題是,你正試圖獲得圖像的大小之前,它實際上呈現。