2009-10-12 23 views
9

Tengo un control de imagen que contiene una ruta a una imagen incrustada (acción de compilación 'recurso').Las imágenes incrustadas no se muestran cuando en un UserControl

<Image Source="Assets/images/image.png" Stretch="None" /> 

Si lo agrego a un contenedor en mi MainPage.xaml la imagen parece estar bien. Al tener la misma imagen en un UserControl como se muestra a continuación, y luego agregar una instancia de ese UserControl en MainPage.xaml, la imagen no aparece.

<UserControl x:Class="HomePage.Views.SimpleUserContol" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
    <Grid x:Name="LayoutRoot" > 
     <Image Source="Assets/images/image.png" Stretch="None" /> 
    </Grid> 
</UserControl> 

¿Alguien puede arrojar alguna luz sobre por qué sucede esto y puede que me señale en la dirección de una solución.

Cheers, J

(estoy trabajando en Silverlight, pero pensaría lo mismo sucede probablemente en WPF)

EDIT:

Configuración

<Image Source="/Assets/images/image.png" Stretch="None" /> 

funciona bien al establecer la acción de compilación a 'Contenido' sin embargo, no funciona cuando se usa 'recurso'. El problema es, sin duda, su posición relativa en la estructura de archivos, ya que add ../ funciona bien. Todavía me gustaría una solución para obtener una imagen del ensamblado si fuera posible

Respuesta

16

Tiene que hacer referencia a él como un recurso, no solo como la ruta. Esta es la forma en que se lleva a cabo en una aplicación WPF:

<Image Source="/MyAppName;component/images/image.png" Stretch="None" /> 

La imagen original se encuentra en imágenes/image.png

Nota:
no tengo experiencia en Silverlight, pero usted dijo que probablemente sea similar en WPF, entonces sugiero que ...

0

Creo que el problema está relacionado con el espacio de nombres "virtual" que obtuvo su imagen cuando está incorporada en recursos (desde la ruta lógica a ella) y la diferencia con su espacio de nombres de control de usuario.

8

Está utilizando una ruta de acceso relativa a la imagen. Si su UserControl está ubicado en un subdirectorio, la ruta relativa ya no es válida. Debe usar una ruta absoluta como "/Assets/images/image.png", o "pack://application:,,,/Assets/images/image.png" (utilice esta última versión si su UserControl va a ser utilizado por otro ensamblaje)

0

usando un '/' para llegar a la raíz del sitio funciona solo si la raíz del sitio no está dentro de un subdirectorio. es decir, un sitio de administración como un subdirectorio al sitio principal (http://www.somesite.com/admin). En este caso, usar '/assets/images/image.png' iría primero al sitio principal. Puede hacer referencia a la imagen como sigue: '~/assets/images/image.png'

3

Si necesita cambiar su tipo de compilación de Contenido a Recurso, intente construir limpio. Tenía todo exactamente correcto (camino a los recursos de otro proyecto, tipo de compilación, etc.) pero no funcionó hasta que agregué una nueva imagen a la carpeta de imágenes, lo que tal vez borró los viejos estados.

De hecho, elimine manualmente las carpetas bin y obj en el proyecto donde está la imagen.

0

También encontré que cuando una imagen tiene caracteres especiales que requieren codificación en el nombre del archivo, como "+", que se codifica %2b, también puede causar el problema.

Sugiero cambiar el nombre de cualquier imagen que pueda contener caracteres de escape.

Cuestiones relacionadas