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



一切看起来都很简单,有很多教程,但我无法将数据(在我的情况下,是图像(传输到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;
}

我知道当我从explorer中获取图像时,那里会有所不同,类似于这样,但它甚至不能显示你可以添加图像

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"/>

最新更新