2012-02-23 1 views
22

У меня есть несколько изображений, которые я хочу встроить в exe.Как обратиться к встроенным ресурсам из XAML?

Когда я установить Build Action для Embedded Resource я получаю через из кода ошибки, что ресурс не доступен, и просит меня установить Build Action для ресурса

I Пробовал несколько различных методов:

<ImageSource x:Key="Image_Background">YearBook;component/Resources/Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">Images/darkaurora.png</ImageSource> 

<ImageSource x:Key="Image_Background">pack://application:,,,/Resources/Images/darkaurora.png</ImageSource> 

Этот код находится в файле ресурсов. Но ни работал, все они бросают эту ошибку:

Cannot convert the string 'pack://application:,,,/Resources/Images/darkaurora.png' into a 'System.Windows.Media.ImageSource' object. Cannot locate resource 'resources/images/darkaurora.png'. Error at object 'Image_Background' in markup file 'YearBook;component/Resources/ImageResources.xaml' Line 4 Position 6. 

и в разных местах в коде я получаю:

the file 'YearBook;component/Resources/Images/shadowdrop.png' is not a part of the project or its 'Build Action' property is not set to 'Resource' 

Итак, что я делаю неправильно?

ответ

17

Когда вы установите BuildAction в ресурс он идет как внедренный ресурс в сборке. Или вы можете установить BuildAction в Содержимое затем оно будет в комплекте в полученный файл .xap. Вы можете использовать любую из этих функций BuildActions. Установив BuildAction до Содержимое Вы можете получить доступ к Изображению как: "/Resources/Images/darkaurora.png" (должно начинаться с косой черты). И когда вы используете ResourceAction Resource, вы можете получить доступ к изображению как "YearBook;component/Resources/Images/darkaurora.png" (assemblyname; component/relativepath). Надеюсь, это поможет.

+13

«Встроенный ресурс» и «Ресурс» различны. Если вы посмотрите на сгенерированную сборку в Reflector или ILSpy, вы увидите, что они включаются по-разному. Автор спросил, как это сделать с помощью «Embedded Resource», а не «Resource». – BrainSlugs83

+0

@ethicallogics, но что, если нужно связать этот ресурс с помощью viewmodel? Есть ли другой вариант, чем привязка к строковому пути? –

+0

Это, к сожалению, не работает для BuildAction = Resource – Nick

2

Установить действие сборки на ресурс, не Embedded Resource

+0

Но я хочу, чтобы это был встроенный ресурс. Мне нужно развернуть приложение без просмотра изображений. –

+3

Установка его в ресурс вложит его в сборку – devdigital

+0

lol это не мое ... –

0

ImageSource не будут создаваться.

public abstract class ImageSource : Animatable, 
IFormattable 

Там же там, что мало abstract, который ввернут свой день вверх. Ваш xaml на самом деле пытается создать экземпляр ImageSource, а затем назначить значение внутри элемента (ваш Uri в этом случае) для свойства, помеченного ContentPropertyAttribute (??), используя любой конвертер, который может быть расположен для преобразования строки в объект (опять же?).

Я думаю, что вы хотите BitmapSource.

<BitmapImage 
    x:Key="Image_Background" 
    UriSource="/Images/darkaurora.png" /> 
+0

Тогда почему это работает, когда я устанавливаю его в Resource? –

+0

@ eric.itzhak: [Uh, really?] (Http://i.stack.imgur.com/RrKXy.png) – Will

+4

На самом деле вы ошиблись, вы можете объявить «ImageSources» в XAML просто отлично, потому что класс имеет связанный с ним [тип конвертер] (http://msdn.microsoft.com/en-us/library/cc645047.aspx) (см. атрибуты в [документах] (http://msdn.microsoft.com/ ан-нас/библиотека/system.windows.media.imagesource.aspx)). Не могу сказать, где это задокументировано, но я думаю, что вы можете мне доверять. Вы получаете эту ошибку только потому, что отсутствует внутренний XML-тег. –