Я не могу получить ActualSize элемента UIElement - PullRequest
1 голос
/ 18 сентября 2011

У меня есть Image элемент управления, сгенерированный во время выполнения.Он отображает правильный размер при отображении.Но я не могу получить размер этого элемента.Width и Height - это NaN.ActualWidth и ActualHeight всегда равны 0,0, и элемент управления никогда не запускает событие SizeChanged.

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

Ответы [ 2 ]

3 голосов
/ 18 сентября 2011

Вы не можете получить доступ к размеру изображения до его рендеринга.И вы не можете визуализировать элемент в Canvas, если он не имеет явного размера.

Итак, ваша проблема в том, что вы пытаетесь получить размер изображения до того, как оно действительно будет отображено.1004 *

1 голос
/ 18 сентября 2011

Если в контейнере Image есть Height и Width, изображение также должно иметь его. Попробуйте положить Image в Grid или StackPanel и установить размер явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...