Я пытаюсь начать работу с WPF в c #.
Я устанавливаю Canvas в качестве содержимого окна, затем создаю другой Canvas и помещаю его как дочерний элемент первого Canvas (вместе с другими элементами, такими как кнопки и метки). Все работает нормально, пока я не создаю объект Image и не добавляю его динамически во внутренний Canvas:
Image m_Img = new Image
{
Name = "img1",
Width = cvWindow.Width,
Height = dUsefulHeight,
Stretch = Stretch.Uniform
};
m_Img.Source = new BitmapImage(
new Uri(xMap.SelectSingleNode("@image").FirstChild.Value,
UriKind.RelativeOrAbsolute));
Canvas.SetLeft(m_Img, 0);
Canvas.SetTop(m_Img, 0);
double d = m_Img.Source.Width;
cvWindow.Children.Add(m_Img);
Здесь m_Img - изображение, которое я создаю, cvWindow - внутренний Canvas. Источником изображения является файл PNG, извлеченный из файла XML (возвращенная строка верна).
Странное поведение здесь: если я закомментирую строку
double d = m_Img.Source.Width;
Изображение больше не отображается, хотя другие элементы управления в Canvas (например, надписи и кнопки) отображаются правильно.
Мне не нужна ширина исходного изображения, поэтому компилятор сообщает мне, что переменная никогда не используется.
Я обновил Visual Studio 2010 до последнего пакета обновления 1, но поведение осталось. Google тоже не помогает. Я пришел к выводу, что свойство Width может иметь метод получения, который запускает какое-то действие, но не может решить головоломку.
Редактировать: То же самое происходит с использованием другого свойства источника (например, Высота). Если я обращаюсь хотя бы к одному свойству, изображение отображается нормально.