Привязка Image.Source к строке с помощью umlauts - файл не найден - PullRequest
0 голосов
/ 29 апреля 2019

Как я могу связать 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)

1 Ответ

0 голосов
/ 29 апреля 2019

Вместо возврата string вы можете вернуть BitmapImage из вашего исходного свойства:

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

Тогда не будет возможного сбоя преобразователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...