Обработка отсутствующих файлов изображений при отображении XAML - PullRequest
1 голос
/ 03 апреля 2009

Я использую XamlReader.Load () для загрузки внешнего файла XAML, который может содержать некоторые изображения и другие носители.

Я использую ParserContext для установки baseUri, поэтому, если пути внутри XAML-файла верны, носитель успешно загружен.

// works
var pc = new ParserContext();
pc.BaseUri = new Uri(baseUri, UriKind.RelativeOrAbsolute);

using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
    return XamlReader.Load(stream, pc);

Есть ли способ узнать, какие медиа-файлы не будут загружаться? То есть, если XAML-файл содержит тег Image с источником, для которого указан путь, который не существует, могу ли я сказать во время выполнения, что изображение отображается неправильно? (Изображения будут наиболее распространенными, но другие элементы управления, такие как MediaElement, могут также загружать внешние файлы.)

Я могу придумать несколько возможных подходов:

  • Анализирует файл XAML, чтобы найти любые имена файлов, и проверяет каждое из них напрямую.
  • При отображении результирующего визуального дерева найдите какое-либо RoutedEvent, которое указывало бы на проблему с загрузкой внешних файлов

Какие-нибудь советы?


Редактировать : Я думаю, что материал XamlReader может отвлекать; Я получаю правильное визуальное дерево, но это может быть проблема с самими элементами управления при попытке загрузить файлы, которые не существуют. Это ошибки, которые я хочу уловить.

1 Ответ

0 голосов
/ 04 апреля 2009

Если вы связываете свое изображение, связывая его с фоновым объектом, вы обнаружите, что ошибки с привязкой в ​​WPF не вызывают исключений. Ознакомьтесь с этой статьей блога, которая может помочь обойти это ограничение .

Элемент мультимедиа, тем не менее, проще, поскольку в нем есть событие (MediaFailed), которое вы можете перехватить, чтобы определить, не сработало ли оно.

<MediaElement Source="filePath.wmv" MediaFailed="EventHandler"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...