Изображение отображается в дизайнере Visual Studio, но не во время выполнения
В настоящее время я работаю с VS studio 2010,.NET 4.0. Вот мой сценарий:
В настоящее время у меня есть проект библиотеки классов под названием "Изображения", который содержит подпапку под названием "Иконки". Все мои иконки в настоящее время живут в этом проекте и доступны через несколько проектов через siteoforigin. Все проявляется отлично в дизайнере, но во время работы изображения не отображаются.
Вот моя структура папок:
- Корневая папка
- Изображения
- Проект 1
- Проект 2
- Проект 3
Все проекты ссылаются на класс изображений. proj, и все значки внутри подпапки "значки" в проекте "Изображения" имеют значение "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>
Ответы
Ответ 1
siteoforigin
предназначен для файлов, скопированных в исполняемый каталог или подкаталоги, для ресурсов, которые вы должны использовать application
как полномочия, насколько я знаю.
SiteOfOrigin:
Путь: имя файла исходного файла сайта, включая его путь относительно местоположения, из которого была запущена исполняемая сборка.
Ответ 2
Это сводило меня с ума. Я пробовал много разных вещей, основываясь на разных статьях, но ничего не получилось. Окно и изображение xaml находятся в отдельной DLL из исполняемой сборки. Не уверен, что это было частью моей проблемы.
В итоге у меня был успех:
- Убедитесь, что в свойствах изображения в проекте есть "Build Action" = "Resource", а не "Embedded Resource"
- В xaml с выбранным тегом изображения используйте окна свойств, чтобы выбрать раскрывающийся список "Источник", поскольку "СЕЙЧАС" изображение появляется в раскрывающемся списке! Это позволит визуальной студии форматировать строку для меня.
Строковая визуальная студия, отформатированная для моего изображения, была:
<Image Source="/Paperless.Common;component/Resources/Checkbook.png" />
где "Paperless.Common" было именем моей сборки, а "Checkbook.png" - это мое изображение, которое находилось в папке "Ресурсы".
Ответ 3
Возможно, на изображении не установлено значение "Действие сборки" для "Ресурс". Если это что-то еще, включая Embedded Resource, то оно не будет отображаться должным образом во время выполнения.
Ответ 4
Хорошо, я вернулась более чем на 3 часа своего времени на эту проблему.
Ваши ответы помогли мне частично решить проблему, и это побудило меня добавить к этому полезному обсуждению.
У меня проблема решена как:
- выберите все изображения в ресурсах исследовательских ресурсов.
- Щелкните правой кнопкой мыши и перейдите к свойствам.
- Создайте действие для "Встроенный ресурс"
- Копировать на вывод в "Копировать всегда"
- сохранить и построить решение.
- добавить изображение и позаботиться, или значение ZIndex.
-
После всего этого я нашел себя, когда я использую изображение несколько раз или пытаюсь перейти на другое изображение на одном и том же элементе управления изображением, чтобы изменить путь для изображения либо на XAML, либо в свойствах управления изображением be:
source="pack:://siteoforigin:,,,/Resources/image.png"
Ответ 5
Я пришел сюда, чтобы получить данные о графическом дизайне для отображения (обратная проблема).
ImagePath="pack://application:,,,/MyApplicationName;component/Images/Icons/Button1.png"
заключается в том, что трюк, помимо Build Action
установлен на Resource
и Copy to Output Directory
, установлен на Copy if newer
.
Ответ 6
Вы также можете использовать относительные пути:
<Button Name="Button1" Click="Button1_Click">
<Button.Content>
<Image Source="Icons/Button1.png" />
</Button.Content>
</Button>
Ответ 7
Это может быть так просто, как то, что я только что сделал сегодня. Я поместил файл в папку, не ссылаясь на него в решении. Во время дизайна он проявил себя хорошо.
Ответ 8
Если вы используете образы из DLL, убедитесь, что проект dll имеет настройку файла ресурсов по умолчанию в свойствах проекта. и изменить его модификатор доступа для публики.
Кроме того, установите действие сборки изображений в "Ресурс"
Ответ 9
У меня была такая же проблема.
Теперь это работает...
Попробуй это:
<Button x:Name="b2" HorizontalAlignment="Left" VerticalAlignment="Top"
Width="26" Height="29">
<Button.Background>
<ImageBrush ImageSource=" a.png"/>
</Button.Background>
</Button>
Ответ 10
Для тех, кто не может попробовать это первым, если вы попытаетесь исправить некоторые исправления, упомянутые здесь, и ничего не работает, попробуйте очистить и перестроить свое решение. Я просто забыл добавить изображения в проект (создать папку с изображениями, щелкнуть правой кнопкой мыши → добавить существующий → щелкнуть по изображению).
Это не исправило его, пока я не сделал чистый и не восстановил.
Ответ 11
Пожалуйста, проверьте изображение включено в решение или нет. Если изображение не включено, нажмите "Показать все файлы из решения", затем щелкните правой кнопкой мыши изображение и выберите "Включить в проект". После этого он будет работать и с относительным путем.
Пример:
"Source ="/Images/Logo/close.png ""
Ответ 12
У меня сработало следующее:
• Build Action = Resource
• Копировать в выходной каталог = не копировать
XAML:
<Image Source="Rsources/myPic.png"/>
Где "myPic.png" - изображение в папке "Ресурсы"
Ответ 13
Я столкнулся с подобной проблемой. Первоначально я использовал следующий формат (в рамках проекта библиотеки классов).
<Image Source="pack://siteoforigin:,,,/Images/Toolbars/Legend.png"/>
Однако, когда я очищал/собирал или перестраивал решение или перезапускал Visual Studio, изображение кнопки исчезало, даже если бы я видел их в конструкторе XAML.
Я нашел странное решение, но оно сработало для меня. С помощью этого решения изображения всегда остаются в такте во время выполнения и на XAML во время разработки, решение -After перестраивается, решение -After очищается, а сборка -After Visual Studio закрывается и перезапускается.
Это решение требует наличия 2 папок (я назвал "Ресурсы") с одинаковыми именами изображений, как в основном приложении, так и в проекте библиотеки классов. По проекту
<Image Source="pack://application:,,,/Resources/Legend.png"/>
Для изображений установите BuildAction = Resource & Copy to OutputDirectory = Не копировать в обоих местах.
Если я использую только папку ресурсов в основном приложении, она все еще работает, но на этот раз анализатор времени разработки XAML не может увидеть изображение. Вот почему я продублировал ту же папку в библиотеке классов (где находится UserControl XAML).
Причиной этого усложнения может быть внутренняя работа парсера 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 = Копировать, если новый
В качестве последнего шага, Очистить и построить решение.
Ответ 14
Самый простой способ - просто добавить изображение в ваш проект. Добавьте папку ресурсов в свой проект, щелкнув правой кнопкой мыши на обозревателе решений → Добавить → Папка (назовите ее ресурс) → Щелкните правой кнопкой мыши вновь созданную папку ресурсов → Нажмите Добавить существующий элемент → Найти изображение (выберите Все файлы)
Добавьте элемент изображения в выбранную вами форму xaml. В свойствах → Общие → Источник, вы можете просто раскрыть и выбрать изображение
Выбор из выпадающего
Ответ 15
- Просто перетащите папку "Значки" в свой проект "Изображения".
- Использовать относительный путь: Image Source = "Icons/Button1.png".
Ответ 16
Все очень хорошие ответы. Я не видел этого выше, и хотя он прост и ясен, это, безусловно, вызовет симптомы исходного сообщения. Легко забыть, когда мы спешим.
Убедитесь, что вы перетаскиваете изображения в проект, чтобы файлы были "Включены в проект". Это быстро доступно из контекстного меню.
Ответ 17
1- изменить свойства образа файла на ресурс, {щелкнуть правой кнопкой мыши по файлу изображения- > выберите "Свойства" → "Построить действие для ресурса".
2- используйте этот тег для отображения изображения
<Image Source="pack://application:,,,/[Put here the Main Namespace];component/[File path]"/>
Пример
<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>
Ответ 18
В моем случае мне просто нужно было выполнить два шага (Свойства Windows):
1) Изменение действия сборки (все файлы ресурсов) на "Ресурс";
2) Выбор (снова) желаемого изображения в поле "Источник".
Ответ 19
В UWP нет выбора "Resource" для Build Action, но выбор "Content" работает, и это то, к чему пришли другие *.png файлы. Тот, который не работал для меня, по какой-то причине вошел как "EmbeddedResource". Спасибо за предложения.
Ответ 20
Мое изображение не в том же проекте, что и мое окно
Я решаю проблему, перейдя в Solution Explorer> "Имя проекта"> Resources, затем выберите изображение и измените Build Action на Resource.
Ответ 21
Может быть, это кому-то поможет с Visual Studio 2019. Мне не хватало простого /
шаги:
Проект правой кнопкой мыши -
Добавить> Существующий элемент -
Выберите картинку для добавления -
Нажмите на картинку в визуальной студии -
перейти к свойствам -
измените действие сборки на> источники
нет мы идем в Xaml и добавляем ваш ресурс
<UserControl.Resources>
<Image x:Key="ButtonImage" Source="/image.jpg"/>
</UserControl.Resources>
/перед именем изображения является обязательным. Без/он будет отображаться как работающий в xaml, но как только вы запустите программу, он не будет отображаться.
<Button Content="{StaticResource ButtonImage}"></Button>
Я надеюсь, что это исправит, если вы прочитаете это