2012-06-15 4 views
7

Я пытаюсь реализовать функциональность в своем приложении WPF, чтобы перетащить изображение из браузера и в окно в моем приложении WPF.Перетаскивание изображения из браузера в приложение WPF

Код прекрасно работает с Firefox и Windows Explorer, но проблемы возникают с 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 не делает ничего с этим.

У кого-нибудь есть представление о том, как я могу получить кросс-браузерную функциональность?


Update: Пар обходного я нашел это для разбора 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 

ответ

1

Вы можете использовать форматы FileGroupDescriptorW и FileContent для получения ваших данных.

  • FileGroupDescriptorW является массивом FileDescriptors', которые описывают ваши данные (например .: название, размер, изменения времени, ...)
  • FileContent содержит содержимое вашего файла.

Если вы не заботитесь о имени файла и просто нужно бинарное содержимое можно использовать

var filestream = (MemoryStream[])dataObject.GetData("FileContents"); 

Если вы хотите более в-отдел-учебник о том, как использовать FileGroupDescriptor (W) Я могу порекомендовать этот код tutorial на codeproject.com. Он говорит о перетаскивании & из MS Outlook, но он использует те же форматы IDataObject.

Смежные вопросы