15

C# .Net 3.5 で、Windows エクスプローラーからのファイルのドラッグ アンド ドロップを WPF ウィンドウ/要素に検出させることは可能ですか? WinForms のソリューションは見つかりましたが、WPF のソリューションは見つかりませんでした。

4

4 に答える 4

9

以下を試してください:

    private void MessageTextBox_Drop(object sender, DragEventArgs e)
    {
        if (e.Data is DataObject && ((DataObject)e.Data).ContainsFileDropList())
        {
            foreach (string filePath in ((DataObject)e.Data).GetFileDropList())
            {
                // Processing here     
            }
        }
    }


    private void MessageTextBox_PreviewDragEnter(object sender, DragEventArgs e)
    {
        var dropPossible = e.Data != null && ((DataObject)e.Data).ContainsFileDropList();
        if (dropPossible)
        {
            e.Effects = DragDropEffects.Copy;
        }
    }

    private void MessageTextBox_PreviewDragOver(object sender, DragEventArgs e)
    {
        e.Handled = true;
    }
于 2011-04-22T12:14:55.723 に答える
6

残念ながら、TextBox、RichTextBox、および FlowDocument ビューアは常にドラッグ アンド ドロップ イベントを処理済みとしてマークするため、イベントがハンドラーにバブリングされません。ドラッグ アンド ドロップ イベントを強制的に処理し (UIElement.AddHandler を使用し、handledEventsToo を true に設定)、ハンドラーで e.Handled を false に設定することで、これらのコントロールによってインターセプトされているドラッグ アンド ドロップ イベントを復元できます。

于 2008-12-03T05:14:57.063 に答える
3

何らかの理由で TextBox にドロップできなかったことが判明しましたが、ボタンへのドロップは正常に機能します。私のウィンドウに 'AllowDrop="True"' を追加し、以下で構成されるボタンにドロップ イベント ハンドラーを追加することで、機能するようになりました。

private void btnFindType_Drop(object sender, DragEventArgs e)
{
  if (e.Data is System.Windows.DataObject &&
    ((System.Windows.DataObject)e.Data).ContainsFileDropList())
  {
    foreach (string filePath in ((System.Windows.DataObject)e.Data).GetFileDropList())
    {
      // Processing here
    }
  }            
}
于 2008-12-02T03:02:18.297 に答える
0

同様の問題がありました.ドロップイベントとドラッグエンターイベントが発生しませんでした。問題は、Windows のユーザー アカウント設定にありました。最も安全でない設定に設定し、動作するのと同じコードを試してください。

于 2012-03-22T08:34:45.293 に答える