助けが必要です。このコードでは、愚かな間違いである必要がありますが、それは何ですか?この非常に単純なコードを実行すると、ビットマップイメージをロードして1回だけ変更できます。最初は正常に動作しますが、画像をもう一度変更したい場合は(ボタンを押してください)、最初の画像が残ります。どうして?BitmapImageソースを一度しか変更できないのはなぜですか?
XAML
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<Button x:Name="AddProfilePicture" HorizontalAlignment="Center" Click="AddProfilePicture_Click">
<Grid Width="200" Height="200">
<Ellipse Width="200" Height="200">
<Ellipse.Fill>
<ImageBrush x:Name="ImageBrush_ProfilePicture" Stretch="UniformToFill"/>
</Ellipse.Fill>
</Ellipse>
</Grid>
</Button>
</StackPanel>
</Grid>
CODE
private async void AddProfilePicture_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker profilePictureFilePicker = new FileOpenPicker();
profilePictureFilePicker.ViewMode = PickerViewMode.Thumbnail;
profilePictureFilePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
profilePictureFilePicker.FileTypeFilter.Add(".jpg");
StorageFile userSelectedProfilePicture = await profilePictureFilePicker.PickSingleFileAsync();
//MAKE SURE U HAVE THIS FILE (ProfilePicture.jpg) IN FOLDER ALREADY....
StorageFile destinationFileImage = await StorageFile.GetFileFromPathAsync(ApplicationData.Current.LocalFolder.Path + @"\" + "ProfilePicture.jpg");
await userSelectedProfilePicture.CopyAndReplaceAsync(destinationFileImage);
Uri profilePictureBitmapURI = new Uri(ApplicationData.Current.LocalFolder.Path + @"\" + "ProfilePicture.jpg");
BitmapImage profilePictureBitmap = new BitmapImage(profilePictureBitmapURI);
ImageBrush_ProfilePicture.ImageSource = profilePictureBitmap;
}
このコードは、余分なチェックを持っていません。これは、アプリを実行する前に、 'ProfilePicture.jpg'というイメージがフォルダ内になければならないことを意味します。コードは最初の実行時にうまくいきますが、2回目の実行(ボタンをもう一度押して新しいピクチャを選択)で、フォルダ内のソース変更があっても画面上の出力を変更することはできません。
**オルタナティブ:**変更Ellipse.Fillファイルを交換する前にヌルし、新しいファイルを使用して新しいブラシを作成します。 – Tundy
これは本当に問題を解決します!私はこれのようなものを推測するが、それをどうやって行うのか全く知らなかった。 (でも、Task.Delay(5000)を待っていた... HAH)Thx! – Weissu
PS。楕円ectを変更しようとしました。 nullにするが、それらはまったく役に立たなかった:-) – Weissu