我的图片不在资源中,而是在磁盘上。该文件夹与应用程序相关。我用过:
Overview_Picture.Source = new BitmapImage(new Uri(String.Format("file:///{0}/../MyImages /myim.jpg", Directory.GetCurrentDirectory())));
Overview_Picture.Source = new BitmapImage(uriSource);
但是那些类型的代码创建了许多问题并搞砸了GetCurrentDirectory返回有时候确定而有时没有。
因此,MyImages文件夹位于Debug文件夹旁边,我怎么能在那里使用它们而不是像我一样,以其他更正确的方式使用它们?
答案 0 :(得分:2)
正如在SO上经常提到的那样,GetCurrentDirectory
方法根据定义并不总是返回程序集所在的目录,而是返回当前的工作目录。两者之间存在很大差异。
您需要的是当前的程序集文件夹(以及它的父目录)。另外,我不确定是否希望图片是安装文件夹上方的一个文件夹(当你说它们比Debug
文件夹高一级时基本上就是你所说的 - 在现实生活中将是安装应用程序的文件夹上方的一个文件夹。)
使用以下内容:
string currentAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string currentAssemblyParentPath = Path.GetDirectoryName(currentAssemblyPath);
Overview_Picture.Source = new BitmapImage(new Uri(String.Format("file:///{0}/MyImages/myim.jpg", currentAssemblyParentPath)));
此外,之后还有一个迷路空间
MyImages
,我将其移除。
答案 1 :(得分:0)
从相对文件路径构造绝对Uri的另一种方法是从相对路径打开FileStream,并将其分配给BitmapImage的StreamSource
属性。但是请注意,在初始化BitmapImage之后,当您想要关闭流时,还必须设置BitmapCacheOption.OnLoad
。
var bitmap = new BitmapImage();
using (var stream = new FileStream("../MyImages/myim.jpg", FileMode.Open))
{
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze(); // optional
}
Overview_Picture.Source = bitmap;