【发布时间】:2015-04-07 12:44:35
【问题描述】:
我在更新 Xaml 中的图像源时遇到了一些问题。我正在制作一个 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 方法,仅此而已。
知道为什么会这样吗?不应该更新吗??
【问题讨论】:
-
那是因为图像在从 Uri 创建时被缓存。创建具有相同文件路径的新 BitmapImage 将返回缓存的图像。您应该打开一个文件流并调用 BitmapImage 的
SetSource或SetSourceAsync方法。 -
我怀疑它与缓存有关。我用 SetSource 玩了一点,但我没有让它工作。这在代码中看起来如何??
-
你为什么不直接从所选图片的路径创建BitmapImage,即
pictureSelect.Path? -
这实际上听起来像是一个聪明的解决方法。我现在尝试了一次,但图像变成了任何东西,即使路径是有效的......我真的无法忍受使用路径..我今天关闭了这些东西,但明天我会更好地尝试一些调试。感谢您迄今为止的建议:)
-
从本地文件 Uri 加载 BitmapImage 似乎不起作用。但是,您可以轻松地直接从文件流中加载图像。看我的回答。