如何将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'(类型为“字符串”);如果使用备用值, 可用。 BindingExpression:Path = Image2; DataItem ='MainWindow' (名称='');目标元素是'Image'(Name ='');目标属性是 '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部署中)
答案 0 :(得分:0)
您可以从源属性中返回string
,而不是返回BitmapImage
:
public BitmapImage Image2 { get; set; } = new BitmapImage(new Uri("/testä.png", UriKind.Relative));
那么就不会有可能发生故障的转换器。