Как я могу связать 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";
Оба изображения включены с помощью действий построения "content" и "copy if newer".
Изображение1 отображается во время выполнения, а изображение2 - нет. Image2 выдает следующую ошибку в окне вывода:
Преобразователю 'TargetDefaultValueConverter' не удалось преобразовать значение
'/ testä.png' (тип 'String'); будет использовано запасное значение, если
имеется в наличии. BindingExpression: Path = Image2; DataItem = 'MainWindow'
(Имя = ''); целевым элементом является 'Image' (Name = ''); целевое свойство
'Source' (тип 'ImageSource') IOException: 'System.IO.IOException: Die
Ресурс "test% c3% a4.png" kann nicht gefunden werden.
Я попробовал несколько версий отсюда ( Как поместить символ Unicode в XAML? ) без успеха.
Редактировать
Очевидно, {Binding Image1}
превращает "/test.png" в "pack: // application: ,,, / WpfImageBindingUmlauts; component / test.png", а не выполняет поиск в файловой системе (как я и подозревал).
Решение 1
Мне удалось принудительно связать вид файловой системы с помощью полного пути к файлу, например «C: \ test.png». Это также работает для "C: \ testä.png".
Решение 2
Поскольку @Andrew Stephens сообщил, что не сталкивался с той же проблемой, мне было любопытно, и я обнаружил, что ранее упомянутый код работает отлично, при использовании действия сборки «ресурс». (Справочная информация: я использовал в первую очередь действие сборки «content», чтобы включить png в развертывание clickonce)