WPF-为什么在运行时从相对路径加载映像会失败*除非*我在调试器中检查对象?
为此制作了一个新的测试项目,带有一个按钮和一个图像。MyImage.png位于项目的调试工作目录中,不包括在项目中 这可以很好地工作,并指定了绝对路径:WPF-为什么在运行时从相对路径加载映像会失败*除非*我在调试器中检查对象?,wpf,image,uri,visual-studio-2019,Wpf,Image,Uri,Visual Studio 2019,为此制作了一个新的测试项目,带有一个按钮和一个图像。MyImage.png位于项目的调试工作目录中,不包括在项目中 这可以很好地工作,并指定了绝对路径: private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e) { Uri fileUri = new Uri("C:/blah/blah/blah/MyImage.png"); BitmapImage myimage = new BitmapImage(
private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
Uri fileUri = new Uri("C:/blah/blah/blah/MyImage.png");
BitmapImage myimage = new BitmapImage(fileUri);
Imagebox.Source = myimage;
}
这不会显示任何具有相对路径的图像:
private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
Uri fileUri = new Uri("MyImage.png", UriKind.Relative);
BitmapImage myimage = new BitmapImage(fileUri);
Imagebox.Source = myimage;
}
但是,我注意到,如果我在最后一行设置断点,检查myimage的属性(它包含指示myimage.png已成功找到的数据),然后继续执行,则相对路径确实有效。此时图像将显示。我正在使用VisualStudio2019社区
我很困惑为什么会发生这种情况。这看起来像个bug。解决方法是设置
位图缓存选项。OnLoad
:
private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
var fileUri = new Uri("MyImage.png", UriKind.Relative);
var myImage = new BitmapImage();
myImage.BeginInit();
myImage.UriSource = fileUri;
myImage.CacheOption = BitmapCacheOption.OnLoad;
myImage.EndInit();
Imagebox.Source = myImage;
}
或者始终使用绝对URI:
private void BtnLoadFromFile_Click(object sender, RoutedEventArgs e)
{
var fileUri = new Uri(Path.Combine(Environment.CurrentDirectory, "MyImage.jpg"));
var myImage = new BitmapImage(fileUri);
Imagebox.Source = myImage;
}