2012-06-15 15 views
7

पर छवि खींचें और छोड़ें मैं अपने WPF एप्लिकेशन में कार्यक्षमता को कार्यान्वित करने की कोशिश कर रहा हूं ताकि ब्राउज़र से एक छवि खींच सकें और मेरे WPF ऐप में एक विंडो में खींच सकें।ब्राउज़र से WPF एप्लिकेशन

कोड फ़ायरफ़ॉक्स और विंडोज एक्सप्लोरर के साथ ठीक काम करता है, लेकिन क्रोम और आईई के साथ समस्याएं उत्पन्न होती हैं (अभी तक किसी अन्य ब्राउज़र की कोशिश नहीं की गई है)।

कोड स्निपेट है:

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

उत्पादन को देखते हुए, ऐसा लगता है कि वास्तव में फ़ायरफ़ॉक्स क्लिपबोर्ड करने के लिए छवि बचाता है, जबकि क्रोम बस, छवि के HTML हथियाने है, जबकि आईई नहीं करता है इसके साथ कुछ भी।

किसी के पास कुछ अंतर्दृष्टि है कि मुझे क्रॉस-ब्राउज़र कार्यक्षमता कैसे मिल सकती है?


अद्यतन: मैंने पाया समाधान के एक जोड़े को एक छवि स्रोत के लिए एचटीएमएल (क्रोम/फ़ायरफ़ॉक्स) पार्स करने के लिए है, तो स्रोत WebClient वस्तु की तरह कुछ का उपयोग करने से डाउनलोड कर रहे हैं। एक विधि पसंद करेंगे, हालांकि, फ़ाइल प्रकार के लिए मजबूत जांच है।

आईई 9 और फ़ायरफ़ॉक्स दोनों में एक डिवाइस-निर्भरता बिटमैप फ़ाइल प्रारूप है जो एक गैर-हाइपरलिंक छवि खींचते समय उपलब्ध है। यह एक सुरक्षित विकल्प प्रतीत होता है, हालांकि क्रोम इसका समर्थन नहीं करता है। यह हाइपरलिंक छवियों के साथ भी इतना उपयोगी नहीं है।


फ़ायरफ़ॉक्स के साथ, निर्गम (Drag_Enter किसी कारण से दो बार निकाल दिया जाता है): फिर

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

इंटरनेट एक्सप्लोरर (:

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 

क्रोम (drag_enter भी दो बार निकाल दिया जाता) , drag_enter दो बार निकाल दिया गया):

UntrustedDragDrop 
msSourceUrl 
FileGroupDescriptor 
FileGroupDescriptorW 
FileContents 
UniformResourceLocator 
Effects: Link 

उत्तर

1

आप अपना डेटा प्राप्त करने के लिए FileGroupDescriptorW और FileContent प्रारूपों का उपयोग कर सकते हैं।

  • FileGroupDescriptorW FileDescriptors 'है कि आपके डेटा (उदा .: नाम, आकार, संशोधित समय, ...)
  • FileContent अपनी फ़ाइल सामग्री शामिल है का वर्णन की एक सरणी है।

आप फ़ाइल नाम के बारे में परवाह नहीं है और सिर्फ द्विआधारी सामग्री की जरूरत है आप

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

इस्तेमाल कर सकते हैं आप कैसे FileGroupDescriptor का उपयोग करने पर एक अधिक विभाग-ट्यूटोरियल (डब्ल्यू) चाहते हैं मैं codeproject.com पर इस tutorial की अनुशंसा कर सकता हूं। यह एमएस आउटलुक से & ड्रॉप के बारे में बात करता है, लेकिन यह उसी IDataObject प्रारूपों का उपयोग करता है।

संबंधित मुद्दे