2012-08-05 6 views
7

Ho un file .png come contenuto della mia applicazione. Quando lo leghiamo in xaml in questo modoCome fare riferimento ai file di origine delle immagini che sono stati confezionati con la mia app in stile metro?

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

tutto ok.

Ho letto this article e quando provo ad accedere a questo file .png a livello di codice ottengo un errore.

codice che utilizzo:

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(); 

E la mia domanda è come fare riferimento a file di origine dell'immagine che sono confezionati con il mio metro stile app?

Grazie per i consigli.

UPDATE: Ho trovato la risposta! Abbiamo bisogno di impostare baseUri usando Parent FrameworkElement invece di impostarlo manualmente. Ad esempio:

// 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; 
} 

Grazie per questo article.

risposta

6

Sì, hai ragione, questa è la risposta alla tua domanda.

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

nuovo URI ("ms: appx");

Penso che sia la fonte del problema originale. Lo schema è ms-appx non ms: appx

Bad URI: ms:appx://Assets/Images/back.png
Buono URI: ms-appx://Assets/Images/back.png

Ma usando FrameworkElement non è una cattiva idea, se si sta veramente cercando di portata qualcosa come suo genitore - anche se entrambi funzionano, quest'ultimo potrebbe probabilmente essere più chiaro al lettore del tuo intento (supponendo che sia il tuo intento).

+0

Dovrebbe essere ms-appx: /// notare il 3 / – ickydime

Problemi correlati