7

アプリケーションのコンテンツとして .png ファイルがあります。このようにxamlでバインドすると

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

すべて大丈夫です。

この記事を読み、この .png にプログラムでアクセスしようとすると、エラーが発生します。

私が使用するコード:

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

私の質問は、メトロ スタイル アプリにパッケージ化されている画像ソース ファイルを参照する方法です。

アドバイスをありがとう。

更新: 答えが見つかりました! 手動で設定するのではなく、親 FrameworkElement を使用して baseUri を設定する必要があります。例えば:

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

この記事をありがとう。

4

2 に答える 2

9

新しい Uri("ms:appx");

それが本来の問題の根源だと思います。スキームは ms:appx ではなく ms-appx です

不適切な URI:ms:appx://Assets/Images/back.png
適切な URI:ms-appx://Assets/Images/back.png

ただし、FrameworkElement を使用することは悪い考えではありません。親のようなものを実際にスコープしようとしている場合は、両方が機能する場合でも、後者の方がおそらく意図の読者にとってより明確になる可能性があります (それがあなたの意図であると仮定して)。

于 2012-08-06T00:33:21.090 に答える
6

はい、そうです、これがあなたの質問に対する答えです。

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;
}
于 2012-08-05T09:54:46.097 に答える