我遇到这种情况,我需要在Silverlight应用程序中显示从Sharepoint站点提取的一堆文件。我使用WCF服务从Sharepoint站点获取数据。
所以我所拥有的是具有相应扩展名的文件名。我需要做的是,在Silverlight应用程序中显示文件及其相应的文件类型图标和文件名。以下是我用于在Silverlight应用程序中显示文件的Heirarchical数据模板。
<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 Web服务和XMLReader来获取有关文件的信息。
答案 0 :(得分:4)
除了保持文件扩展名的内部映射到我们自己的文件图标的明显解决方案之外,我能想到的唯一其他解决方案是回调服务器以获取文件类型的图像。 / p>
有一个名为SHGetFileInfo的本机shell函数,它可以提供文件的文件信息。请注意,如果使用SHGFI_USEFILEATTRIBUTES标志,则文件不必在服务器上实际存在。当然问题是你需要使用P / Invoke实际调用这个函数,因为它不是标准.NET库中的托管函数。
以下Microsoft知识库文章应该让您开始了解如何从.NET调用SHGetFileInfo。 How to use the SHGetFileInfo function to get the icons that are associated with files in Visual C# .NET
有关使用P / Invoke调用SHGetFileInfo的更多详细信息,您还可以看到以下URL,它包含所有标志的定义。
http://www.pinvoke.net/default.aspx/shell32.SHGetFileInfo
NB:由于silverlight不直接支持ICO文件,因此您需要一个ICO图像解码器。我没有尝试过这个代码,但你可以试试他的博客上的Joe Stegman代码。
http://blogs.msdn.com/b/jstegman/archive/2009/09/13/silverlight-ico-icon-decoder-parser.aspx