Изображение отображается в конструкторе Visual Studio, но не во время выполнения - PullRequest
27 голосов
/ 13 декабря 2011

Я сейчас работаю с VS studio 2010, .NET 4.0.Вот мой сценарий:

В настоящее время у меня есть проект библиотеки классов под названием «Изображения», который содержит подпапку «Значки».Все мои значки в настоящее время живут в этом проекте и доступны для нескольких проектов через siteoforigin.Все отображается хорошо в дизайнере, но во время выполнения изображения не отображаются.

Вот моя структура папок:

  • Корневая папка
    • Изображения
      • Иконки
    • Проект1
    • Проект 2
    • Проект 3

Все проекты ссылаются на класс изображений Lib.proj, и все значки в подпапке «icons» в проекте «Images» установлены на: «Build Action = Resource».

xaml выглядит так (что прекрасно видно во время разработки):

     <Button Name="Button1" Click="Button1_Click">
        <Button.Content>
            <Image Source="pack://siteoforigin:,,,/Data.Images;component/Icons/Button1.png" />
        </Button.Content>
    </Button>

Ответы [ 19 ]

1 голос
/ 25 сентября 2014

Если вы используете изображения из DLL, убедитесь, что у проекта dll есть настройки файла ресурсов по умолчанию в свойствах Project. и измените его модификатор доступа на public. Также установите для действия по созданию изображений значение «Ресурс»

0 голосов
/ 16 июня 2019

Я столкнулся с подобной проблемой.Первоначально я использовал следующий формат (в рамках проекта библиотеки классов).

<Image Source="pack://siteoforigin:,,,/Images/Toolbars/Legend.png"/>

Однако при очистке / сборке или перестройке решения или перезапуске Visual Studio изображение кнопки исчезнет, ​​даже еслиЯ хотел бы видеть их на XAML-конструкторе.

Я нашел странное решение, но оно сработало для меня.С помощью этого решения изображения всегда остаются в такте во время выполнения и на XAML во время разработки, -После того, как решение перестраивается. -После очистки и сборки решения. -После закрытия и перезапуска Visual Studio.

Это решение требуетиметь 2 папки (я назвал «Ресурсы») с одинаковыми именами изображений, как в основном приложении, так и в проекте библиотеки классов.В рамках проекта

<Image Source="pack://application:,,,/Resources/Legend.png"/> 

Для изображений установите BuildAction = Resource & Copy to OutputDirectory = Не копировать в обоих местах.

Если я использую только папку ресурсов в основном приложении, онавсе еще работает, но на этот раз анализатор времени разработки XAML не может видеть изображение.Вот почему я продублировал ту же папку в библиотеке классов (где находится XAML UserControl).

Причиной этого усложнения может быть внутренняя работа парсера XAML.Часть времени разработки всегда смотрит на местоположение папки в проекте, в котором находится UserControl, а часть времени выполнения требует, чтобы изображения были в основном приложении для правильной работы.

Я не утверждаю, чтоэто правильное или разумное решение, но в моем случае это сработало.Приветствуются комментарии для улучшенного или лучшего решения.

ОБНОВЛЕНИЕ: После проб и ошибок + некоторые другие подсказки (https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-4.0/aa970069(v=vs.100)), Я придумал более простое решение, и оно работает (для меня)

В ресурсах объявляют:

<BitmapImage x:Key="mLegend" UriSource="pack://siteoforigin:,,,/Images/Toolbars/Legend/Legend.png"/>

под Кнопкой объявляют:

<Image Source="{StaticResource mLegend}"/>

set BuildAction = Content & Copy to OutputDirectory = Копировать, если новый

как последний шаг, Очистить и построить решение.

0 голосов
/ 11 апреля 2019

Мое изображение не находится в том же проекте, что и мое окно

Я решаю проблему, перейдя в Solution Explorer> «Имя проекта»> Ресурсы, затем выберите изображение и измените Действие сборки на Ресурс .

0 голосов
/ 19 марта 2019

В UWP нет выбора «Ресурс» для Build Action, но выбор «Содержимое» работает, и это то, что другие * .png файлы пришли как. Тот, который не работал для меня, по какой-то причине вошел как «EmbeddedResource». Спасибо за предложения.

0 голосов
/ 26 мая 2017

В моем случае мне просто нужно было выполнить два шага (Свойства Windows):
1) Изменение действия сборки (все файлы ресурсов) на «Ресурс»;
2) Выбор (снова) нужного изображения в поле Источник.

0 голосов
/ 25 мая 2017

Всем, кто не может попробовать это в первую очередь, если вы попытаетесь исправить некоторые из упомянутых здесь исправлений, но ничего не работает, попробуйте очистить и пересобрать решение. Я просто забыл добавить изображения в проект (создайте папку изображений, щелкните правой кнопкой мыши папку -> добавить существующий -> нажмите на изображение).

Это не исправило это, пока я не сделал чистку и перестройку.

0 голосов
/ 11 мая 2017

1 - измените свойства изображения файла на ресурс, {щелкните правой кнопкой мыши по файлу изображения-> выберите Свойства -> переключить действие сборки на ресурс.

2 - используйте этот тег для отображения изображения

 <Image Source="pack://application:,,,/[Put here the Main Namespace];component/[File path]"/>

пример

<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>
0 голосов
/ 24 марта 2017

Все очень хорошие ответы.Я не видел этого выше, и хотя это просто и очевидно, это, безусловно, вызовет симптомы оригинального сообщения.Легко забыть, когда мы спешим.

Убедитесь, что вы перетаскивали изображения в проект, чтобы файлы были «включены в проект».Это быстро доступно из контекстного меню.

0 голосов
/ 19 января 2015
  1. Просто перетащите папку «Значки» в свой проект «Изображения».
  2. Используйте относительный путь: Image Source = "Icons / Button1.png".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...