Silverlight: источник изображения без расширения файла не отображается - PullRequest
0 голосов
/ 16 ноября 2011

В моем проекте Silverlight изображения, для которых исходный URI не содержит расширение файла, не отображаются, хотя в документации сказано, что это должно быть.

Я установил источник изображения так:

imgCompanyLogo.Source = new BitmapImage(new Uri(Application.Current.Host.Source, "/Files/" + logoName));

Теперь, если «logoName» содержит расширение файла (например, «.png»), изображение отображается нормально, но оно просто не отображается, если файл хранится без расширения.

Это, кажется, противоречит документации здесь , в которой говорится:

"Расширения имен файлов, зависящие от формата, такие как .png, не обязательно должны указываться в именах URI, но если для найденного файла не определен допустимый формат изображения, возникает исключение времени выполнения."

Я не получаю никаких исключений во время выполнения. Это известная проблема или я упускаю что-то простое?

Спасибо!

PS: Немного извращения, изображения хорошо отображаются при отладке, а не при развертывании системы ...

1 Ответ

2 голосов
/ 16 ноября 2011

Я провел некоторый тест, и проблема, похоже, связана с ответом от сервера.

Если вы попытаетесь использовать .png в вашем проекте с Build Action, установленным в Resource, оба изображения будут загруженынезависимо от расширения.

Теперь, если вы попробуете с изображениями, размещенными на сервере, это не будет иметь такое же поведение.На самом деле, если вы попытаетесь просмотреть ссылку на изображение без расширения непосредственно в вашем браузере, это приведет к чему-то еще.В Chrome он загрузит файл, а в IE он отобразит результат в виде простого текста.

Это из-за типа MIME.Png должен быть возвращен с типом изображения \ png.

. С помощью .htaccess есть способ настроить MIME-тип, но вам необходимо указать, для какого расширения.Это работает так:

AddType image \ png yourExtension [Extension2] [Extension3] ..

И если вы хотите узнать, почему изображение не загружалосьв вашем элементе управления Image вы можете добавить обработчик событий к событию ImageFailed:

<Image Source="..." ImageFailed="Image_ImageFailed" />

Но сообщение об ошибке, которое вы увидите, не очень полезно:

ErrorException = {System.Exception:AG_E_NETWORK_ERROR}

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