2012-08-05 16 views
7

Tengo un archivo .png como contenido de mi aplicación. Cuando lo enlace en xaml como este¿Cómo hacer referencia a los archivos fuente de la imagen que vienen empaquetados con mi aplicación de estilo metro?

<ImageBrush x:Key="BtnBackImageBrush" ImageSource="/Assets/Images/back.png" /> 

todo bien.

Leo this article y cuando trato de obtener acceso a este .png programáticamente me sale un error.

Código: Consumo:

Uri baseUri = new Uri("ms:appx"); 
Image img = new Image(); 
img.Source = new BitmapImage(new Uri(baseUri, "/Assets/Images/back.png")); 
img.ImageFailed += (sender, args) => new MessageDialog("Error").ShowAsync(); 

Y mi pregunta es cómo hacer referencia a archivos de origen de la imagen que se envasan con mi aplicación de estilo de Metro?

Gracias por los consejos.

ACTUALIZACIÓN: ¡He encontrado la respuesta! Necesitamos establecer baseUri usando Parent Framework en lugar de configurarlo manualmente. Por ejemplo:

// Usage 
myImage.Source = ImageFromRelativePath(this, "relative_path_to_file_make_sure_build_set_to_content"); 

public static BitmapImage ImageFromRelativePath(FrameworkElement parent, string path) 
{ 
    var uri = new Uri(parent.BaseUri, path); 
    BitmapImage result = new BitmapImage(); 
    result.UriSource = uri; 
    return result; 
} 

Gracias por este article.

Respuesta

6

Sí, tienes razón, esta es la respuesta a tu pregunta.

img.Source = ImageFromRelativePath(this, "Assets/Images/back.png"); 

public static BitmapImage ImageFromRelativePath(FrameworkElement parent, string path) 
{ 
    var uri = new Uri(parent.BaseUri, path); 
    BitmapImage bmp = new BitmapImage(); 
    bmp.UriSource = uri; 
    return bmp; 
} 
9

nuevo URI ("ms: appx");

Creo que ese es el origen del problema original. El esquema es ms-appx no ms: aprox

Malo URI: ms:appx://Assets/Images/back.png
Buena URI: ms-appx://Assets/Images/back.png

Pero el uso de FrameworkElement no es una mala idea, si usted está realmente tratando de alcance algo así como su matriz - incluso si ambos funcionan, es probable que este último sea más claro para el lector de su intención (suponiendo que esa sea su intención).

+0

Debe ser ms-appx: /// tenga en cuenta el 3 / – ickydime

Cuestiones relacionadas