2012-06-15 33 views
7

Bir WPF uygulamamdaki bir görüntüyü tarayıcıdan ve WPF uygulamamdaki bir pencereye sürüklemek için işlevleri uygulamaya çalışıyorum.Görüntüyü tarayıcıdan WPF Uygulaması'na sürükleyip bırakın

Kod, Firefox ve Windows Gezgini ile sorunsuz çalışıyor, ancak Chrome ve IE ile ilgili sorunlar ortaya çıkıyor (henüz başka tarayıcılar denemediniz). IE yapmaz iken, Chrome sadece görüntünün html kapma oysa, Firefox aslında panoya görüntüyü kaydeder gibi görünüyor,

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 
     } 
    } 
} 

çıktı baktığımızda: Burada

bir kod parçacığı var onunla bir şey.

Çapraz tarayıcı işlevlerini nasıl edinebileceğime dair bir fikriniz var mı?


Güncelleme: buldum geçici çözümlerden bir çift daha sonra bir görüntü kaynağı için html (Krom/Firefox) ayrıştırmak WebClient nesnesi gibi bir şey kullanarak bir kaynaktan indirmek için vardır. Yine de, dosya türü için daha güçlü bir denetime sahip olan bir yöntemi tercih ederdim.

IE9 ve Firefox'un her ikisi de köprüler olmayan bir görüntüyü sürüklerken kullanılabilen bir DeviceIndependentBitmap dosya biçimine sahiptir. Bu, Chrome'un desteklemediği görülse de, daha güvenli bir alternatif gibi görünüyor. Ayrıca köprü resimleriyle çok kullanışlı değildir. Firefox ile


, çıkış (Drag_Enter nedense iki kez kovuluyor) 'dir:

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 

Krom (drag_enter da iki kez kovuluyor):

DragContext 
DragImageBits 
FileGroupDescriptorW 
FileContents 
HTML Format 
text/html 
text/x-moz-url 
UniformResourceLocatorW 
UniformResourceLocator 
Text 
UnicodeText 
System.String 
Effects: Copy, Move, Link 

Internet Explorer (tekrar (drag_enter iki kere ateşlendi):

cevap

1

Verilerinizi almak için FileGroupDescriptorW ve FileContent biçimlerini kullanabilirsiniz.

  • FileGroupDescriptorW verilerinizi (ör .: isim, boyut, modifiye zamanı, ...)
  • fileContent dosya içeriğini içeren açıklayan FileDescriptorları boşaltmanın bir dizidir.

Eğer dosya hakkında bakım ve sadece ikili içerik gerekir yoksa FileGroupDescriptor nasıl kullanılacağı hakkında daha içinde derinlemesine-öğretici (W) istiyorsanız

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

kullanabilirsiniz Bu tutorial kodunu codeproject.com'da önerebilirim. MS Outlook'tan & sürükleme hakkında konuşur, ancak aynı IDataObject biçimlerini kullanır.

İlgili konular