回答:
これは基本的にあなたがやりたいことです。
private void ImagePanel_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
// Note that you can have more than one file.
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
// Assuming you have one file that you care about, pass it off to whatever
// handling code you have defined.
HandleFileOpen(files[0]);
}
}
また、XAMLで実際にイベントをフックすること、およびAllowDrop属性を設定することを忘れないでください。
<StackPanel Name="ImagePanel" Drop="ImagePanel_Drop" AllowDrop="true">
...
</StackPanel>
AllowDropTrueに設定されていますが、Dropイベントハンドラーは呼び出されません。ウィンドウ上にファイルをドラッグすると、「拒否された」円形のシンボルが表示されます
Gridはルート要素として使用し、Border内部をBackgroundプロパティに設定しました(白は問題ありませんが、透明ではありません)。内部Borderには実際のコンテンツを入れています。
画像ファイルは e、DragEventArgsクラスのインスタンスであるパラメータにます。
(senderパラメーターには、イベントを発生させたオブジェクトへの参照が含まれています。)
具体的には、 e.Dataメンバーを。ドキュメントで説明されているようにIDataObject、ドラッグイベントからのデータを含むデータオブジェクト()への参照が返されます。
の IDataObjectインターフェースは、目的のデータオブジェクトを取得するためのいくつかのメソッドを提供します。おそらく、操作しているデータの形式を見つけるためにGetFormatsメソッドを呼び出すことから始めたいと思うでしょう。(たとえば、実際の画像ですか、それとも単に画像ファイルへのパスですか?)
次に、ドラッグインされるファイルの形式を特定したら、GetDataメソッドの特定のオーバーロードの1つを呼び出して、実際に特定の形式でデータオブジェクトを取得します。
さらに、ARの回答にはTextBox、ドロップに使用する場合は、以下のことを知っておく必要があることに注意してください。
TextBoxのデフォルトの処理はすでにいくつかあるようですDragAndDrop。データオブジェクトがの場合String、それは単に機能します。他のタイプは処理されず、Forbiddenマウス効果が発生し、Dropハンドラーが呼び出されることはありません。
あなたがあなた自身の取り扱いを有効にすることができますように思えるe.Handledの真にPreviewDragOverイベントハンドラ。
XAML
<TextBox AllowDrop="True" x:Name="RtbInputFile" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" />
C#
RtbInputFile.Drop += RtbInputFile_Drop;
RtbInputFile.PreviewDragOver += RtbInputFile_PreviewDragOver;
private void RtbInputFile_PreviewDragOver(object sender, DragEventArgs e)
{
e.Handled = true;
}
private void RtbInputFile_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
// Note that you can have more than one file.
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
var file = files[0];
HandleFile(file);
}
}