Отображение значка типа файла в Silverlight - PullRequest
1 голос
/ 30 марта 2011

У меня такая ситуация, когда мне нужно отобразить кучу файлов, извлеченных с сайта Sharepoint, в приложении Silverlight. Я использую сервис WCF для получения данных с сайта Sharepoint.

Итак, у меня есть имена файлов с соответствующими расширениями. Что мне нужно сделать, это отобразить файлы в приложении Silverlight с соответствующим значком типа файла и именем файла. Ниже приведен шаблон данных Heirarchical, который я использую для отображения файлов в приложении Silverlight.

<sdk:HierarchicalDataTemplate x:Key="FileTemplate">
    <StackPanel Orientation="Vertical">
        <Image x:Name="imgFile" Source="{Binding FileImage}" Height="35" ></Image>
        <TextBlock x:Name="txtFile" Text="{Binding FileName}"></TextBlock>
      </StackPanel>
  </sdk:HierarchicalDataTemplate>

Где FileImage и FileName являются строками.

PS: причина, по которой у меня нет типа и размера файла, заключается в том, что я использую веб-службы Sharepoint и XMLReader для получения информации о файлах.

1 Ответ

4 голосов
/ 30 марта 2011

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

Существует встроенная функция оболочки с именем SHGetFileInfo , которая может предоставить информацию о файле для файла. Обратите внимание, что если вы используете флаг SHGFI_USEFILEATTRIBUTES, файл не должен физически существовать на сервере. Конечно, проблема в том, что вам нужно использовать P / Invoke для фактического вызова этой функции, поскольку она не существует как управляемая функция в стандартных библиотеках .NET.

Следующая статья о Microsoft KB поможет вам начать с того, как вызвать SHGetFileInfo из .NET. Как использовать функцию SHGetFileInfo для получения значков, связанных с файлами в Visual C # .NET

Для получения более подробной информации об использовании P / Invoke для вызова SHGetFileInfo вы также можете увидеть следующий URL-адрес, который включает определение всех флагов.

http://www.pinvoke.net/default.aspx/shell32.SHGetFileInfo

Примечание: Поскольку файлы ICO напрямую не поддерживаются Silverlight, вам потребуется декодер изображений ICO. Я сам не пробовал этот код, но вы можете попробовать код бу Джо Стегмана, расположенный в его блоге.

http://blogs.msdn.com/b/jstegman/archive/2009/09/13/silverlight-ico-icon-decoder-parser.aspx

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