回答:
これは基本的にあなたがやりたいことです。
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>
AllowDrop
Trueに設定されていますが、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);
}
}