从资源管理器拖放到 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"/>
一切看起来都很简单,教程也不少,但我无法将数据(在我的例子中是图像)传输到 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"/>