我在更新Xaml中的Image源时遇到了一些麻烦。我正在制作一个Windows应用商店应用程序,我试图在我的C#代码中设置源代码。基本上,我的小程序正在做的是让用户选择一个JPG文件,然后将其复制到AppData文件夹。在我的应用程序中,我想要用户上传的图片显示。除了显示图像的部分外,一切都正常工作,即使我提供了新的来源,这张图片也不想改变。
C#代码:
public sealed partial class MainPage : Page
{
FileOpenPicker pickerSelect;
FileSavePicker pickerSave;
StorageFolder folder;
StorageFile pic;
public MainPage()
{
this.InitializeComponent();
InitializePickers();
InitializeProfilePicture();
}
private async void InitializeProfilePicture()
{
folder = Windows.Storage.ApplicationData.Current.LocalFolder;
pic = await folder.GetFileAsync("profile.jpg");
BitmapImage uri = new BitmapImage(new Uri(pic.Path, UriKind.Absolute));
ProfilePic.Source = uri;
}
private void InitializePickers()
{
pickerSelect = new FileOpenPicker();
pickerSave = new FileSavePicker();
pickerSelect.FileTypeFilter.Add(".jpg");
}
private async void Upload_Click(object sender, RoutedEventArgs e)
{
StorageFile pictureSelect = await pickerSelect.PickSingleFileAsync();
StorageFolder folder = Windows.Storage.ApplicationData.Current.LocalFolder;
await pictureSelect.CopyAsync(folder, "profile.jpg", NameCollisionOption.ReplaceExisting);
InitializeProfilePicture();
}
}
在方法“InitializeProfilePicture”中,我创建了一个新的BitmapImage,并将ProfilePic设置为此。这个代码只运行一次,如果我像现在一样在开始时运行InitializeProfilePicture,并且用户选择新图片并上传到AppData文件夹,图像不会改变(即使图片确实已上传)。如果我从一开始就删除该方法并将其保留在Button_Click方法中,则新上传的图片将显示。但是在ProfilePic设置它的源之后上传新图片,它不会改变。
Xaml中的图像就像这样
Image Width="480" Height="640" x:Name="ProfilePic" Grid.Row="1" Grid.RowSpan="2"
..此处还有一个按钮来运行Upload_Click方法,但就是这样。
知道为什么会这样吗?它不应该更新?
答案 0 :(得分:1)
您可以直接从文件中加载BitmapImage,如下所示:
var imageFile = await picker.PickSingleFileAsync();
var bitmap = new BitmapImage();
using (var stream = await imageFile.OpenReadAsync())
{
await bitmap.SetSourceAsync(stream);
}
ProfilePic.Source = bitmap;