1

Windows 8の場合、Webから画像をダウンロードし、ユーザーのドキュメントライブラリにプログラムで作成されたサブフォルダーに保存するアプリを作成しました。

必要な機能と宣言をアプリケーションマニフェストに追加しました。

  • ドキュメントライブラリが機能として有効化
  • jpgのファイルタイプの関連付けが追加され、宣言に「openissafe」とマークされています

アプリを起動すると、すべてのフォルダーとファイルが正しく作成され、ユーザーはファイルシステムから手動で開くことができます。

私の課題は次のとおりです。プログラムで利用可能なすべての画像を読み込み、この画像のリストをXAML要素にバインドする場合、画像ソースを正しく設定するために使用できるURI「xxx:///yyy/zzz.jpg」が必要です。いろいろなスキーマフレーバーを試してみました。「file:/// yyy / zzz.jpg」ですが、成功しませんでした。

これを行う方法はありますか、それともまったく方法がありませんか?

画像がアプリケーションデータに保存されている場合、XAMLは「ms-appdata:///local/zzz.jpg」のようなURIに満足しています。しかし、私は間違いなくユーザーのライブラリに写真を保存したいと思います。

助けてくれてありがとう!

4

1 に答える 1

0

Image Sourceプロパティにバインドしている場合、ファイルパスをバインドすることはできません。BitmapImageデータ型にバインドする必要があります。Sourceプロパティをコードで直接設定している場合は、次のようになります。

           BitmapImage bitmapImage = new BitmapImage();
            await bitmapImage.SetSourceAsync(fileStream);
            MyImage.Source = bitmapImage;

オブジェクトリストにバインドする場合、オブジェクトにはBitmapImageデータ型を返すプロパティが必要です(簡略化-サポートする必要もありINotifyPropertyChangedます)。

public class MyDataBoundItem
{
   public BitmapImage MyBindableImage {get;set;}
}

このようなコードでPicturesフォルダ内のファイルを列挙できます...

var picFolder = Windows.Storage.KnownFolders.PicturesLibrary;
var options = new QueryOptions(CommonFileQuery.DefaultQuery,new List<string> { ".png", ".jpg" }) ;
options.FolderDepth = FolderDepth.Deep;

var query = picFolder.CreateFileQueryWithOptions(options);
var files = await query.GetFilesAsync();

秘訣は、データのロード方法によって異なりますが、対応するファイルをファイルから各データバインドオブジェクトに取得して、BitmapImageプロパティを提供できるようにすることです。これは、SetSourceAsync呼び出しが非同期であるため、INotifyPropertyChangedをサポートして、バインドされたオブジェクトがイメージが利用可能になったときにUIに通知できるようにする必要があるためです。難しいことではありませんが、直感的にわかりません。

于 2012-09-03T21:10:48.183 に答える