Добавить изображение в StackPanel программно - PullRequest
9 голосов
/ 27 июля 2011

Я пытаюсь программно сгенерировать StackPanel и добавить Image к StackPanel. Каким-то образом я получаю пустую StackPanel. Я не вижу ничего плохого в моем коде, и он не выдает никаких исключений:

StackPanel Sp = new StackPanel();
Sp.Orientation = Orientation.Horizontal;

Image Img = new Image();
BitmapImage BitImg = new BitmapImage(new Uri(
    "/MyProject;component/Images/image1.png", UriKind.Relative));
Img.Source = BitImg;

Sp.Children.Add(Img);

[EDIT]

Я попробовал другой способ добавить изображение, и оно работает. Меня это заинтриговало, потому что они кажутся мне по сути одинаковыми:

Следующий код РАБОТАЕТ (показать изображение):

Image Img = new Image();
Img.Source = new BitmapImage(new Uri(
             "pack://application:,,,/MyProject;component/Images/image1.png"));

Следующий код работает НЕ РАБОТАЕТ (изображение отсутствует):

Image Img = new Image();
BitmapImage ImgSource = new BitmapImage(new Uri(
    "pack://application:,,,/MyProject;component/Images/image1.png",
    UriKind.Relative));
Img.Source = BitImg;

Почему они разные ??

Ответы [ 4 ]

11 голосов
/ 27 июля 2011
Img.Source = new BitmapImage(new Uri(
             "pack://application:,,,/MyProject;component/Images/image1.png"));

использует по умолчанию UriKind.Absolute, а не UriKind.Relative

Если вы хотите, чтобы пользователь UriKind.Relative - URI должен быть в другом формате. Посмотрите на MSDN

5 голосов
/ 27 июля 2011

Нет воспроизведения.

Я скопировал / вставил ваш код в обработчик кнопок и добавил 1 строку:

  root.Children.Add(Sp);

Совет: установите точку останова в конце этого кода и используйте"WPF Tree Visualizer", чтобы увидеть, все ли там, где вы думаете.Это маленькое зазеркалье в окнах «Местные жители» и «Авто».

1 голос
/ 21 ноября 2014

Этот код работает нормально

Uri uri = new Uri("/Assets/default.png", UriKind.Relative);    
BitmapImage imgSource = new BitmapImage(uri);    
profileImage.Source = imgSource;

или

BitmapImage image = new BitmapImage(new Uri("/Assets/default.png", UriKind.Relative));
profileImage.Source = image;
0 голосов
/ 27 июля 2011

Нет проблем в вашем первом коде. В конце этого кода вы должны добавить StackPanel в ваше окно или сетку внутри окна. Также обратите внимание, что в качестве действия по сборке изображения должно быть указано «Resource», а в вашем URI («/MyProject;component/Images/image1.png») «MyProject» должно быть именем вашей сборки, а не именем вашего проекта. Проверьте имя сборки на вкладке «Приложение» в свойствах проекта.

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