Почему источник 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>

КОД

    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 ответа

Решение

При создании BitmapImage установите CreateOptions в IgnoreImageCache.

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

Попробуйте добавить метод Load() и посмотрите, поможет ли это:

 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()
}
Другие вопросы по тегам