2012-08-05 14 views
7

Mam plik .png jako treść mojej aplikacji. Kiedy wiążę go w Xaml, to wszystko jest w porządku.Jak odnosić się do plików źródłowych obrazów, które są spakowane w mojej aplikacji w stylu metra?

Czytam this article i kiedy próbuję uzyskać dostęp do tego .png programowo pojawia się błąd.

Kod używam:

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

I moje pytanie brzmi: w jaki sposób odwoływać pliki źródłowe obrazu, które są pakowane w moim stylu metro app?

Dzięki za porady.

AKTUALIZACJA: Znalazłem odpowiedź! Potrzebujemy ustawić baseUri przy użyciu rodzica FrameworkElement zamiast ustawiania go ręcznie. Na przykład:

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

Dzięki za to article.

Odpowiedz

6

Tak, masz rację, to jest odpowiedź na twoje pytanie.

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

nowy URI ("MS: personelu to");

Myślę, że to źródło pierwotnego problemu. Program jest MS-appx nie ms: appx

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

Ale używając FrameworkElement nie jest to zły pomysł, jeśli jesteś naprawdę próbuje coś podobnego zakresu jego rodzica - nawet jeśli oba działają, to drugie prawdopodobnie może być bardziej przejrzyste dla czytelnika z twojego zamiaru (zakładając, że to twój zamiar).

+0

Powinien to być ms-appx: /// zanotować 3 / – ickydime

Powiązane problemy