从资源管理器拖放到 wpf 元素

Drag & Drop from explorer to wpf element

一切看起来都很简单,教程也不少,但我无法将数据(在我的例子中是图像)传输到 wpf window 元素。我能够实现图像从一个元素到另一个元素的传输。但是当我捕获图像(例如,桌面)时,当我将其传输到所需的元素时,传输选项甚至没有出现,只有一个划掉的圆圈并且没有解决超过一个与 drop 相关的事件(好像 AllowDrop = false)

我的代码:

XAML

<Image x:Name="mainContent" Grid.Column="1" Stretch="Fill" AllowDrop="True" Drop="MainContent_Drop" />

C#

private void SpImageLeft_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Image image = sender as Image;
        DragDrop.DoDragDrop(image, image, DragDropEffects.Copy);
    }

    private void MainContent_Drop(object sender, DragEventArgs e)
    {
        Image image = (Image)e.Data.GetData(typeof(Image));
        mainContent.Source = image.Source;
    }

我知道当我从资源管理器中获取图像时,那里会有所不同,就像这样,但它仍然没有显示您可以添加图像

private void MainContent_Drop(object sender, DragEventArgs e)
    {
        string[] arr = (string[])e.Data.GetData(DataFormats.FileDrop);
        mainContent.Source = (ImageSource)new ImageSourceConverter().ConvertFromString(arr[0]);
    }

以下作为图像控件的 Drop 事件处理程序为我工作:

private void OnMainImageDrop(object sender, DragEventArgs e)
        {
            if (sender is Image image && e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                if (e.Data.GetData(DataFormats.FileDrop) is string[] filePaths)
                {
                    image.Source.Freeze();

                    string filePath = filePaths[0];

                    var uriSource = new Uri(filePath);
                    var imageSource = new BitmapImage(uriSource);

                    image.Source = imageSource;
                }
            }
            
        }

我使用占位符图像来确保图像具有大小并用作鼠标悬停表面。

XAML:

<Image x:Name="MainImage" Grid.Row="1" 
               Source="Images/DotNetLogo.png" 
               Stretch="Uniform" 
               AllowDrop="True" Drop="OnMainImageDrop"/>