Подтвердить что ты не робот

Изображение отображается в дизайнере 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>
4b9b3361

Ответ 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>

Я надеюсь, что это исправит, если вы прочитаете это