2012-06-15 28 views
7

私のWPFアプリケーションで、ブラウザーから画像をドラッグして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 
     } 
    } 
} 

IEは行いませんがクロームだけで、画像のHTMLをつかんれるのに対し、Firefoxが実際に画像をクリップボードに保存しているようですそれに何か。

誰かがブラウザ間の機能をどのように利用できるかについての洞察はありますか?


更新: 私が見つけた回避策のカップルは、WebClientのオブジェクトのようなものを使用してソースからダウンロードした後、イメージソース用のHTML(クローム/ Firefoxの)を解析しています。 ただし、ファイルタイプのチェックがより強くなる方法が好まれます。

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 

クロム(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は2回):

UntrustedDragDrop 
msSourceUrl 
FileGroupDescriptor 
FileGroupDescriptorW 
FileContents 
UniformResourceLocator 
Effects: Link 

答えて

1

FileGroupDescriptorWおよびFileContent形式を使用してデータを取得できます。

  • FileGroupDescriptorWは、あなたのデータを記述するファイルディスクリプタの配列(例えば:名前、サイズ、変更時、...)
  • 含むFileContentは、あなたのファイルの内容が含まれています。

ファイル名を気にし、ちょうどあなたがFILEGROUPDESCRIPTOR(W)を使用する方法に関するより詳細なDEPT-チュートリアルをしたい場合は、

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

を使用することができバイナリコンテンツを必要としない場合codeproject.comで tutorialをお勧めします。それはMS Outlookからドラッグ&ドロップについて語るが、同じIDataObjectフォーマットを使用する。

関連する問題