【问题标题】:I can't get ActualSize of an UIElement我无法获得 UIElement 的 ActualSize
【发布时间】:2011-09-18 12:10:44
【问题描述】:

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

我也在运行时生成文本框,我也无法获取它们的大小。

生成图片的代码如下。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果Image 的容器有HeightWidth,则图像也应该有它。尝试将您的 Image 放入 GridStackPanel 并明确设置大小。

      【讨论】:

      • 它包含在画布中,画布具有高度和宽度。
      • 感谢您的回答。 Canvas 容器的大小为 NaN。当我解决这个问题时,我的问题就解决了。
      • 你能告诉我你是怎么解决你的问题的吗,我也遇到了同样的问题。
      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多