【问题标题】:Drag & Drop from explorer to wpf element从资源管理器拖放到 wpf 元素
【发布时间】:2021-05-31 14:51:38
【问题描述】:

一切似乎都很简单,并且有很多教程,但我无法将数据(在我的情况下为图像)传输到 wpf 窗口元素。我能够实现图像从一个元素到另一个元素的传输。但是当我捕获图像(例如,桌面)时,当我将其传输到所需的元素时,传输选项甚至不会出现,只有一个划掉的圆圈,并且不会产生多个与 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]);
    }

【问题讨论】:

    标签: c# wpf drag-and-drop


    【解决方案1】:

    以下内容对我来说是 Image 控件的 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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      相关资源
      最近更新 更多