Встроенные изображения не отображаются в UserControl - PullRequest
9 голосов
/ 12 октября 2009

У меня есть элемент управления Image, который содержит путь к встроенному изображению (действие сборки 'resource').

<Image Source="Assets/images/image.png" Stretch="None" />

Если я добавлю это в контейнер в моем файле MainPage.xaml, изображение будет в порядке. При наличии того же изображения в UserControl, как показано ниже, а затем при добавлении экземпляра этого UserControl в MainPage.xaml изображение не отображается.

<UserControl x:Class="HomePage.Views.SimpleUserContol"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Grid x:Name="LayoutRoot" >
        <Image Source="Assets/images/image.png" Stretch="None" />
    </Grid>
</UserControl>

Может ли кто-нибудь пролить свет на то, почему это происходит, и, возможно, направить меня в сторону решения.

Приветствия, J

(я работаю в Silverlight, но думаю, что то же самое, вероятно, происходит в WPF)

EDIT:

Настройка

<Image Source="/Assets/images/image.png" Stretch="None" />

отлично работает при установке действия сборки на «Содержимое», но не работает при использовании «ресурса». Проблема определенно в том, что это относительная позиция в файловой структуре, так как add ../ работает нормально. Я все еще хотел бы решение, чтобы получить изображение из сборки, если это возможно

Ответы [ 7 ]

17 голосов
/ 12 октября 2009

Вы должны ссылаться на него как на ресурс, а не просто путь. Вот как это делается в приложении WPF:

<Image Source="/MyAppName;component/images/image.png" Stretch="None" />

Исходное изображение находится в images / image.png

Примечание:
У меня нет опыта в SilverLight, но вы сказали, что он, вероятно, похож на WPF, поэтому я предлагаю это ...

8 голосов
/ 12 октября 2009

Вы используете относительный путь к изображению. Если ваш UserControl находится в подкаталоге, относительный путь больше не действителен. Вы должны использовать абсолютный путь, например "/Assets/images/image.png" или "pack://application:,,,/Assets/images/image.png" (используйте эту последнюю версию, если ваш UserControl будет использоваться другой сборкой)

3 голосов
/ 20 июня 2011

Если вам нужно изменить тип сборки с Content на Resource, попробуйте собрать clean. У меня все было в порядке (путь к ресурсам другого проекта, тип сборки и т. Д.), Но это не сработало, пока я не добавил новое изображение в папку изображений, что, возможно, очистило старые статусы.

Фактически, вручную удалите папки bin и obj в проекте, где находится изображение.

0 голосов
/ 04 августа 2018

У меня была эта проблема, и я попытался переместить изображение внутрь и из холста, а также вверх и вниз по контейнеру холста. Я даже пытался манипулировать Panel.zindexes безрезультатно. Я использовал source = "/images/map.jpg". Папка с изображениями была создана путем щелчка правой кнопкой мыши по проекту и добавления папки, чтобы она находилась ниже папки ресурсов. Решено: я перешел к папке с изображениями в проводнике Windows и использовал alt + d и ctrl + c, чтобы скопировать местоположение файла с этими \ вместо этих / и вуаля, это сработало.

0 голосов
/ 31 августа 2012

Я также обнаружил, что когда у изображения есть специальные символы, которые требуют кодировки в имени файла, например, "+", который кодируется %2b, это также может вызвать проблему.

Я предлагаю переименовать любые изображения, которые могут содержать escape-символы.

0 голосов
/ 12 октября 2009

Использование «/» для доступа к корню сайта работает, только если корень сайта не находится в подкаталоге. то есть: сайт администратора в качестве подкаталога к основному сайту (http://www.somesite.com/admin). В этом случае, используя '/assets/images/image.png', вы сначала перейдете на родительский сайт. Возможно, вы сможете сослаться на изображение вот так: '~ / assets / images / image.png'

0 голосов
/ 12 октября 2009

Я думаю, что проблема связана с «виртуальным» пространством имен, полученным вашим изображением, когда оно встроено в ресурсы (от логического пути к нему), и различием с вашим пространством имен usercontrol.

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