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 が 2 回発生します)。
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 も 2 回発生します):
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