0

Visual Studio の Grid App XAML テンプレートに基づいて Windows ストア アプリを作成しました。グループを含むコレクションにバインドしGridViewます。各グループにはアイテムが含まれ、各アイテムにはメタデータと画像が含まれます。CollectionViewSourceは、グリッド ビューでグループ内の項目を表示するために使用されます。これはすべてうまくいきます。次に、新しいアイテムを追加するためのボタンを追加しました。クリックすると、メタデータを含むアイテムが表示されますが、画像は表示されません。クリックイベントハンドラ:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    SampleDataGroup sampleDataGroup = SampleDataSource.GetGroup("Group-1");
    var sampleDataItem = new SampleDataItem("uniq", "Title", "Subtitle", "c:/users/christian/pictures/my_image.jpg", "Description", "Content", sampleDataGroup);
    sampleDataGroup.Items.Add(sampleDataItem);
}

ただし、イメージが Pictures フォルダーからではなく、プロジェクトの Assets フォルダーから読み取られた場合は、期待どおりに機能します。何か案は?

4

2 に答える 2

2

Win8 アプリではファイル システムに直接アクセスできないため、イメージ パス (c:/users/christian/pictures/my_image.jpg) は XAML でのイメージの読み込みに失敗します。

最善の策は、ImageSource を使用してクラスをコーディングし、イメージ ファイル名が変更されたときにそれを C# にロードすることです。

例については、こちらを参照してください

于 2012-09-26T10:28:18.903 に答える
1

ZombieSheep (LOL) が述べたように、そのようなファイルシステムにはアクセスできません。画像を (たとえば) プロジェクトの Assets フォルダーに追加し、次のように参照します (boot.jpg と呼ばれる画像、MyImage と呼ばれる画像のビューの要素)。collectionviewsource を使用する場合も同じで、正しいパスを設定するだけです (ms-appx:/// または this.UriBase を使用するか、URI ベース文字列を保持する静的な読み取り専用プロパティを定義します)。

お役に立てれば :)

 public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        SetImage();
    }

    private static readonly Uri _baseUri = new Uri("ms-appx:///");

    void SetImage()
    {
        MyImage.UriSource = new Uri(this.BaseUri, "Assets/boot.jpg");
        //MyImage.Source = new BitmapImage(new Uri("ms-appx:///Assets/boot.jpg"));
        //MyImage.Source = new BitmapImage(new Uri(_baseUri,"/Assets/boot.jpg"));
    }
}

新しい BitmapImage を設定するか、ビューで BitmapImage を定義して、Uri を設定する必要があります:)

于 2012-09-26T12:12:01.273 に答える