it-swarm.com.ru

Как обратиться к встроенным ресурсам из XAML?

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

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

Я попробовал несколько разных методов:

 <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'

Итак, что я делаю не так?

23
eric.itzhak

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

24
ethicallogics

Установите для действия сборки значение Resource, а не Embedded Resource. 

2
devdigital

ImageSource не может быть создан. 

public abstract class ImageSource : Animatable, 
IFormattable

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

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

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