我正在尝试在我的WPF应用程序中实现功能,将图像从浏览器拖到我的WPF应用程序的窗口中。
该代码适用于Firefox和Windows资源管理器,但Chrome和IE出现了问题(尚未尝试任何其他浏览器)。
以下是代码段:
private void Drag_Enter(object sender, DragEventArgs e)
{
foreach (string format in e.Data.GetFormats())
Console.WriteLine(format);
Console.WriteLine("Effects:" + e.AllowedEffects);
}
private void Drag_Drop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
ImageSourceConverter converter = new ImageSourceConverter();
foreach (string file in files)
{
if (converter.IsValid(file))
{
// Do something with the image
}
}
}
看看输出,似乎Firefox实际上将图像保存到剪贴板,而Chrome只是抓取图像的html,而IE不会对它做任何事情。
任何人都对我如何获得跨浏览器功能有所了解?
更新: 我发现的一些解决方法是解析html(Chrome / Firefox)的图像源,然后使用类似WebClient对象的源从源代码下载。 但是,更喜欢一种方法,它可以更好地检查文件类型。
IE9和Firefox都有一个DeviceIndependentBitmap文件格式,拖动非超链接图像时可用。这似乎是一个更安全的选择,虽然Chrome似乎不支持它。它对超链接图像也没那么有用。
使用Firefox,输出为(Drag_Enter由于某种原因被触发两次):
text/x-moz-url
FileGroupDescriptor
FileGroupDescriptorW
FileContents
UniformResourceLocator
UniformResourceLocatorW
text/x-moz-url-data
text/x-moz-url-desc
text/uri-list
text/_moz_htmlcontext
text/_moz_htmlinfo
text/html
HTML Format
Text
UnicodeText
System.String
application/x-moz-nativeimage
DeviceIndependentBitmap
FileDrop
FileNameW
FileName
Preferred DropEffect
application/x-moz-file-promise-url
application/x-moz-file-promise-dest-filename
DragImageBits
DragContext
Effects: Link, All
Chrome(drag_enter也会被解雇两次):
DragContext
DragImageBits
FileGroupDescriptorW
FileContents
HTML Format
text/html
text/x-moz-url
UniformResourceLocatorW
UniformResourceLocator
Text
UnicodeText
System.String
Effects: Copy, Move, Link
Internet Explorer(再次,drag_enter激活了两次):
UntrustedDragDrop
msSourceUrl
FileGroupDescriptor
FileGroupDescriptorW
FileContents
UniformResourceLocator
Effects: Link
答案 0 :(得分:1)
您可以使用FileGroupDescriptorW和FileContent格式来获取数据。
如果您不关心文件名,只需要二进制内容即可使用
var filestream = (MemoryStream[])dataObject.GetData("FileContents");
如果你想要一个关于如何使用FileGroupDescriptor(W)的更多in-dept教程,我可以在codeproject.com上推荐这个 tutorial。它讨论了从MS Outlook中拖放,但它使用相同的IDataObject格式。