2012-02-23 28 views
22

Tengo varias imágenes que quiero incrustar en el exe.¿Cómo hacer referencia a los recursos incrustados de XAML?

cuando me puse la Acción de generación a Recurso incrustado acabe el código de un error que el recurso no está disponible y que me pide para establecer la Acción de generación de recursos a

I Intentó varios métodos diferentes:

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

Este código se encuentra en un archivo de recursos. Pero nada funcionó, todos lanzan este error:

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. 

y en lugares diferentes en el código me sale:

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' 

Entonces, ¿qué estoy haciendo mal?

Respuesta

17

cuando se establece el BuildAction a Recursos que va como recurso incrustado en una asamblea. O puede establecer BuildAction en Contenido y luego se incluirá en el archivo .xap resultante. Puede usar cualquiera de estas BuildActions. Al establecer BuildAction a Contenido puede acceder a la Imagen como: "/Resources/Images/darkaurora.png" (debe comenzar con barra inclinada). Y cuando usa BuildAction Resource, puede acceder a la imagen como "YearBook;component/Resources/Images/darkaurora.png" (assemblyname; component/relativepath). Espero que esto ayude

+13

"Recurso incrustado" y "Recurso" son diferentes. Si observa el ensamblaje generado en Reflector o ILSpy, verá que se incluyen de diferentes maneras. El autor preguntó cómo hacerlo con "Recurso incrustado", no "Recurso". – BrainSlugs83

+0

@ethicallogics, pero ¿qué pasa si se necesita vincular este recurso a través de viewmodel? ¿Hay alguna otra opción que unir a la ruta de cadena? –

+0

Esto lamentablemente no funciona para BuildAction = Recurso – Nick

2

establecer la acción acumulación de recursos, no Recurso incrustado

+0

Pero quiero que sea un recurso incrustado. Necesito desplegar la aplicación sin que se vean las imágenes. –

+3

Configurarlo en un recurso lo insertará en el conjunto – devdigital

+0

jajaja no es mío ... –

0

ImageSource no puede ser instanciada.

public abstract class ImageSource : Animatable, 
IFormattable 

Hay que poco abstract ahí que atornillar hasta el día. Su xaml está tratando de instanciar una instancia de ImageSource, luego asigne el valor dentro del elemento (su Uri, en este caso) a una propiedad marcada con ContentPropertyAttribute (??) usando cualquier convertidor que pueda ubicarse para convertir la cadena a un objeto (otra vez, ??).

Creo que quieres un BitmapSource.

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

Entonces, ¿por qué funciona cuando lo configuro en Recurso? –

+0

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

+4

En realidad, este error, puedes declarar 'ImageSources' en XAML simplemente porque la clase tiene asociado un [convertidor de tipo] (http://msdn.microsoft.com/en-us/library/cc645047.aspx) (consulte los atributos en [los documentos] (http://msdn.microsoft.com/). en-us/library/system.windows.media.imagesource.aspx)). No puedo decirle dónde está documentado, pero creo que puedes confiar en mí sobre eso. Obtiene ese error solo porque falta el XML interno de la etiqueta. –

Cuestiones relacionadas