2

助けが必要です。このコードでは、愚かな間違いである必要がありますが、それは何ですか?この非常に単純なコードを実行すると、ビットマップイメージをロードして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回目の実行(ボタンをもう一度押して新しいピクチャを選択)で、フォルダ内のソース変更があっても画面上の出力を変更することはできません。

答えて

1

はIgnoreImageCacheCreateOptionsを設定します。

var profilePictureBitmap = new BitmapImage(profilePictureBitmapURI) {CreateOptions = BitmapCreateOptions.IgnoreImageCache}; 
+0

**オルタナティブ:**変更Ellipse.Fillファイルを交換する前にヌルし、新しいファイルを使用して新しいブラシを作成します。 – Tundy

+0

これは本当に問題を解決します!私はこれのようなものを推測するが、それをどうやって行うのか全く知らなかった。 (でも、Task.Delay(5000)を待っていた... HAH)Thx! – Weissu

+0

PS。楕円ectを変更しようとしました。 nullにするが、それらはまったく役に立たなかった:-) – Weissu

0

ロードを追加する()メソッドを試してみて、それが助けかどうかを確認:のBitmapImageを作成中

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; 
    ImageBrush_ProfilePicture.Load() 
} 
関連する問題