2009-10-12 3 views
9

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

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

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

Cheers, J

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

EDIT:

Установка

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

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

ответ

16

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

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

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

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

0

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

8

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

0

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

3

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

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

0

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

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