用变音符号将Image.Source绑定到字符串-找不到文件

时间:2019-04-29 09:20:31

标签: wpf binding

如何将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部署中)

1 个答案:

答案 0 :(得分:0)

您可以从源属性中返回string,而不是返回BitmapImage

public BitmapImage Image2 { get; set; } = new BitmapImage(new Uri("/testä.png", UriKind.Relative));

那么就不会有可能发生故障的转换器。