Изображение отображается в конструкторе Visual Studio, но не во время выполнения

В настоящее время я работаю с VS Studio 2010, .NET 4.0. Вот мой сценарий:

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

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

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

Все проекты ссылаются на класс изображений Images. 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>

28 ответов

Решение

siteoforigin для файлов, скопированных в исполняемый каталог или подкаталоги, для ресурсов, которые вы должны использовать application как авторитет, насколько я знаю.

SiteOfOrigin:

Путь: имя файла сайта происхождения, включая его путь относительно места, откуда была запущена исполняемая сборка.

Это сводило меня с ума. Я пробовал много разных вещей на основе разных статей, но ничего не получалось. Мое окно xaml и образ находятся в отдельной DLL от исполняемой сборки. Не уверен, что это было частью моей проблемы.

В конце концов я имел успех с:

  1. Убедитесь, что свойства изображения в проекте имеют "Build Action" = "Resource", а не "Embedded Resource"
  2. В xaml с выбранным тегом изображения используйте окна свойств, чтобы выбрать раскрывающийся список "Источник", так как СЕЙЧАС изображение появляется в раскрывающемся списке! Это позволило визуальной студии отформатировать строку для меня.

Струйная визуальная студия, отформатированная для моего изображения:

<Image Source="/Paperless.Common;component/Resources/Checkbook.png" />

где "Paperless.Common" - это название моей сборки, а "Checkbook.png" - мое изображение, которое находится в папке "Resources".

Возможно, для изображения не задано действие "Сборка" в качестве ресурса. Если это что-то еще, включая встроенный ресурс, то оно не будет отображаться должным образом во время выполнения.

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

Я решил мою проблему как:

  1. выберите все изображения в ресурсах вашего обозревателя решений.
  2. Щелкните правой кнопкой мыши и перейдите к свойствам.
  3. Создайте действие для "Встроенного ресурса"
  4. Копировать на вывод в "Копировать всегда"
  5. сохранить и построить решение.
  6. добавить изображение и позаботиться о нем или значение ZIndex.
  7. После всего этого я нашел себя, когда использую изображение несколько раз или пытаюсь перейти к другому изображению в том же элементе управления изображением, чтобы изменить путь к изображению либо в XAML, либо в свойствах элемента управления изображением:

    source="pack:://siteoforigin:,,,/Resources/image.png"
    

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

ImagePath="pack://application:,,,/MyApplicationName;component/Images/Icons/Button1.png" это то, что сделал трюк, в дополнение к Build Action установлен в Resource а также Copy to Output Directory установлен в Copy if newer,

У меня сработало следующее:

• Build Action = Resource

• Копировать в выходной каталог = не копировать

XAML:

<Image Source=“Rsources/myPic.png”/>

Где "myPic.png" - изображение в папке "Ресурсы"

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

<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}"/>

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

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

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

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

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

Я решаю проблему, перейдя в Solution Explorer > "Имя проекта" > Resources, затем выберите изображение и измените Build Action на Resource.

Самый простой способ - просто добавить изображение в свой проект. Добавьте папку ресурсов в свой проект, щелкнув правой кнопкой мыши проводник решений -> Добавить -> Папка (назовите ее ресурс) -> Щелкните правой кнопкой мыши вновь созданную папку ресурсов -> Нажмите Добавить существующий элемент -> Найдите свое изображение (выберите Все файлы)

Добавьте элемент изображения в выбранную форму xaml. В разделе "Свойства" -> "Общие" -> "Источник" вы должны просто раскрыть список и выбрать свое изображение.

Выбор из раскрывающегося списка

Возможно, это поможет кому-то с Visual Studio 2019. Мне не хватало простого /

Шаги: щелкните правой кнопкой мыши Project - Добавить> Существующий элемент - Выберите изображение для добавления - Щелкните изображение в Visual Studio - перейдите к свойствам - измените действие сборки на> Ресурсы

нет, мы заходим в Xaml и добавляем ваш ресурс

<UserControl.Resources> <Image x:Key="ButtonImage" Source="/image.jpg"/> </UserControl.Resources>

/ перед именем изображения является обязательным. Без / он будет отображаться как работающий в xaml, но как только вы запустите программу, он не будет отображаться.

<Button Content="{StaticResource ButtonImage}"></Button>

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

У меня была такая же проблема.
Теперь это работает...
Попробуй это:

<Button x:Name="b2" HorizontalAlignment="Left" VerticalAlignment="Top"
    Width="26" Height="29"> 
    <Button.Background> 
        <ImageBrush ImageSource=" a.png"/> 
    </Button.Background>
</Button>

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

Вы также можете просто использовать относительные пути:

<Button Name="Button1" Click="Button1_Click">
    <Button.Content>
        <Image Source="Icons/Button1.png" />
    </Button.Content>
</Button>

Пожалуйста, проверьте изображение включено в решение или нет. Если изображение не включено, нажмите "Показать все файлы из решения", затем щелкните правой кнопкой мыши изображение и выберите "Включить в проект". После этого он будет работать и с относительным путем.

Пример:

"Source =" / Images / Logo / close.png ""

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

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

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

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

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

пример

<Image Source="pack://application:,,,/My;component/Resources/switch-off.png"/>

В моем случае я помещаю изображение в папку ресурсов проекта и указываю полный путь к изображению в исходном пути.

Выберите изображение, щелкнув код изображения XAML, затем найдите и выберите изображение в окне свойств из раскрывающегося списка в разделе common/source.

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

Я решил свою проблему: у него было несколько пользовательских элементов управления, имеющих <Image>. Моя цель состояла в том, чтобы использовать их в <Window>, принадлежащем другим проектам. Беда: содержимое изображения было видно в режиме конструктора, но во время выполнения оно исчезло... Решение:

  1. В VisualStudio во фрейме обозревателя решений (Ctrl+W,S) выберите файл, который вы хотите использовать в качестве изображения.
  2. В его свойствах (Ctrl+W,P) рамки выберите:
  • Действие компилятора: "Ресурс"
  • Копировать в выходной каталог: «Копировать всегда»
  1. Перетащите этот файл на свой Xaml. Он будет выглядеть так:<Источник изображения="/ имя_проекта;компонент/ Папка / имя_файла.png "/>

Оно работает.

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

Включение имени сборки работает Действие сборки => копировать ресурс в выходной каталог => копировать, если новее

   System.Windows.Controls.Image mini = new System.Windows.Controls.Image();
                            mini.Source = new BitmapImage(new Uri(@"pack://application:,,,/Cloudnynpos;component/Imageresources/tbl2.png"));
                            btnnew.Content = mini;

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

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

  1. Просто перетащите папку "Иконки" в свой проект "Изображения".
  2. Используйте относительный путь: Image Source="Icons/Button1.png".

Для меня это сработало только после того, как я перешел к свойствам изображения, а затем установил «Действие сборки» на «Содержимое» и «Копировать в выходной каталог» на «Копировать всегда».

Перейти к SolutionExplorer-> Найти папку с изображениями -> Щелкните правой кнопкой мыши свое изображение и перейдите к свойствам. Измените действие сборки "Нет" на "Ресурс... Изменение свойства изображения"

Это сработало для меня, но только когда я изменил шаг 3 с «Встроенные ресурсы» на просто «Ресурсы». Я скопировал и вставил здесь ответ @Mohamed Hussein, потому что у меня все еще недостаточно репутации, чтобы оставлять комментарий под его сообщением. >>>

Ну, я потратил на эту проблему более 3 часов своего времени. Ваши ответы помогли мне частично решить проблему, и это побудило меня добавить в это полезное обсуждение.

Я решил свою проблему как:

1- выберите все изображения в ресурсах обозревателя решений.

2- Щелкните правой кнопкой мыши и перейдите к свойствам.

3- Действие сборки на «Встроенный ресурс» >> Изменить на «Ресурсы»

4- Копировать в вывод для «Всегда копировать»

5- сохранить и построить решение.

6- добавьте изображение и позаботьтесь о значении ZIndex.

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

source="pack:: // siteoforigin:,,, / Resources / image.png"

Другие вопросы по тегам