我正在WPF应用程序中构建一个Floors图库,我正在从csv文件中读取图像名称,用户将直接将图像复制到Resources文件夹中。
StreamReader streamReader = new StreamReader(
(Application.Current as PlayOnSurface.App).ProjectAmenitiesCSVPath);
// browse the csv file line by line until the end of the file
while (!streamReader.EndOfStream)
{
// for each line, split it with the split caractere (that may no be ';')
var splitLine = streamReader.ReadLine().Split('~');
if (int.Parse(splitLine[0].Trim())
== (Application.Current as PlayOnSurface.App).SelectedFloorID)
{
for (int i = 2; i < splitLine.Length; i++)
{
ImageList.Add(splitLine[i].Trim());
}
}
// map the splitted line with an entity
}
streamReader.Close();
btnPrev.IsEnabled = false;
if (ImageList.Count <= 1)
btnNext.IsEnabled = false;
imgGallery.Source = Utilities.LoadBitmapFromResource(
"Resources/Amenities/" + ImageList[0],
null);
实用程序代码
public static BitmapImage LoadBitmapFromResource(string pathInApplication, Assembly assembly = null)
{
if (assembly == null)
{
assembly = Assembly.GetCallingAssembly();
}
if (pathInApplication[0] == '/')
{
pathInApplication = pathInApplication.Substring(1);
}
return new BitmapImage(new Uri(@"pack://application:,,,/" + assembly.GetName().Name + ";component/" + pathInApplication, UriKind.Absolute));
}
我无法在项目的Resources文件夹中添加它,我无法嵌入资源,因为我希望用户在Resources文件夹中复制文件并在部署后更新csv文件。
我的代码会读取它并显示图库但在这种情况下,WPF会在上面的代码中加载imgGallery.Source
行上的图像时抛出“无法找到资源”异常。
我的csv文件格式:
1~FirstFloor~img1.png~img2.png~img3.png
2~SecondFloor~img1.png~img2.png~img3.png
3~ThirdFloor~img1.png~img2.png~img3.png
4~FourthFloor~img1.png~img2.png~img3.png
答案 0 :(得分:0)
也许使用文件绝对路径,只需将LoadBitmapFromResource
函数的最后一行更改为:
return new BitmapImage(new Uri(assembly.GetName().CodeBase + pathInApplication, UriKind.Absolute));
这应该做的修复。
您也可以尝试使用UriKind.Relative
。
美好的一天
答案 1 :(得分:0)
您在URI方案中使用了错误的权限。应用程序权限用于编译时已知的数据文件(也称为静态资源)。您必须将其替换为siteoforigin权限。
我还建议您使用标准CSV文件替换自制文本文件格式。许多程序(如Excel)默认支持生成以逗号分隔的字段。虽然可以放置自定义分隔符,但它们通常需要额外的工作量。读取和解析逗号分隔文件也更容易,因为许多库可用于执行这些任务。