2つのソースからの画像の表示に問題がありました。私はMainPageとMainPageViewModelを持っています。最初にページがロードされると、パスを使用してプロジェクトフォルダからイメージを取得します。 だからMainPage.xamlをViewModelのFilePickerとプロジェクトフォルダからの画像のバインド
<Image Source="{Binding ImageUri}" VerticalAlignment="Center" HorizontalAlignment="Center" Width="300" Height="300"/>
そしてMainPageViewModel
private string _imageUri;
public RelayCommand PickPhotoCommand { get; set; }
public string ImageUri
{
get { return _imageUri; }
set
{
_imageUri = value;
NotifyPropertyChanged("ImageUri");
}
}
ですべてが明確でシンプルです。しかし、ユーザーはfilePickerから画像を選択することができ、古い画像を選択した画像に置き換える必要があります。しかし、FilePickerから返されたStorageFileからUriを取得することはできません。唯一のオプションは、StorageFileからSetSourceAsync()
を使用してBitmapImageを取得することです。 xamlページに画像を表示する際の問題を解決する2つのソリューションがあります。 ティは最初である - 私は
ImageUri = new BitmapImage(new Uri("ms-appx:///Assets/StoreLogo.png"));
を使用してのBitmapImageに私のImageUriプロパティタイプを変更することができ、プロジェクトフォルダからイメージのためか、どこかので、両方のソースのためのBitmapImageを使用しています。しかし私のチームリーグは、BitmapImageが画像(スケール、トリミングなど)を変更するために使用されていたことを言います。それは意味的に間違っています。 2番目の解決策は、 - FilePickerからファイルを取得し、Temprorary Folderにコピーして、FolderからcopiedFileを取得し、そのパスを取得します。
StorageFile file = await openPicker.PickSingleFileAsync();
StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
StorageFile copiedFile = await file.CopyAsync(tempFolder, file.Name, NameCollisionOption.ReplaceExisting);
var fileFromTemp = await ApplicationData.Current.TemporaryFolder.GetFileAsync(copiedFile.Name);
ImageUri = fileFromTemp.Path;
私たちはImageUri
プロパティの文字列を使用できます。 お客様のご意見をお聞かせください。
「BitmapImageを使用して画像を変更する(スケール、トリミングなど)」とはどういう意味ですか?あなたのチームリーダーは、おそらく彼が何を話しているのか分からないでしょう。 BitmapImageは正しいアプローチです。イメージファイルを一時的な場所にコピーするのは簡単ではありません。 – Clemens