【发布时间】:2019-09-17 21:34:30
【问题描述】:
如何将 Image.Source 绑定到包含变音符号的文件名?
<StackPanel>
<Image Source="{Binding Image1}" />
<Image Source="{Binding Image2}" />
</StackPanel>
// DataContext
public string Image1 { get; set; } = "/test.png";
public string Image2 { get; set; } = "/testä.png";
这两个图像都通过构建操作“内容”和“如果更新则复制”包含在内。
Image1 在运行时可见,而 Image2 不可见。 Image2 在输出窗口中产生以下错误:
“TargetDefaultValueConverter”转换器无法转换值 '/testä.png'(输入“字符串”);将使用后备值,如果 可用的。绑定表达式:路径=Image2;数据项='主窗口' (名称='');目标元素是'图像'(名称='');目标属性是 'Source'(类型'ImageSource')IOException:'System.IO.IOException:死 资源 "test%c3%a4.png" kann nicht gefunden werden.
我从这里 (How to put a unicode character in XAML?) 尝试了一些版本,但没有成功。
编辑
显然,{Binding Image1} 将“/test.png”转换为“pack://application:,,,/WpfImageBindingUmlauts;component/test.png”,而不是在文件系统上搜索(正如我所怀疑的那样)。
解决方案 1 我设法通过使用像“C:\test.png”这样的完整文件路径来强制在文件系统上进行绑定。这也适用于“C:\testä.png”。
解决方案 2 对于@Andrew Stephens 报告没有遇到同样的问题,我很好奇,发现前面提到的代码在使用构建操作“资源”时可以完美运行。 (背景:我首先使用构建操作“内容”,将 png 包含到 clickonce 部署中)
【问题讨论】:
-
我刚刚复制了这个,它对我有用!现在,如果我删除该文件,我会得到与您相同的“转换器”错误,但后一部分是 FileNotFoundException 而不是像您这样的 IOException: FileNotFoundException:'System.IO.FileNotFoundException: Could not find file 'C:\Temp \testä.png'。文件名:'C:\Temp\testä.png'。不确定这是否对您有帮助?!
-
这是出乎意料的。您的系统是否也搜索文件名“test%c3%a4.png”?
-
抱歉,我最初使用的是绝对路径(有效),但我发现相对路径像你的一样失败。它似乎与
Image.Source属性的内置字符串转换器有关。您必须编写自己的转换器来处理它。请参阅此答案及其后面的答案:stackoverflow.com/a/17267458/981831 -
谢谢。实际上,我可以使用绝对路径,不用费心创建自己的 IValueConverter。