我无法获得UIElement的ActualSize

时间:2011-09-18 12:10:45

标签: c# silverlight windows-phone-7 size uielement

我有一个Image控件,在运行时生成。它在显示时呈现正确的大小。但我无法得到那个元素的大小。 WidthHeight是NaN。 ActualWidthActualHeight始终为0.0,控件永远不会触发SizeChanged事件。

enter image description here

我也在运行时生成TextBoxes,我也无法获得它们的大小。

生成图像的代码如下所示。

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);

2 个答案:

答案 0 :(得分:3)

在渲染之前,您无法访问图像的大小。如果项目没有明确的大小,则无法在Canvas中呈现项目。

所以你的问题是你在实际渲染之前试图获得图像的大小。

答案 1 :(得分:1)

如果Image的容器有HeightWidth,则图片也应该包含Image。尝试将Grid放入StackPanel或{{1}}并明确设置大小。