尝试拖放文件时不触发拖放事件

  • 本文关键字:拖放 事件 文件 c# uwp
  • 更新时间 :
  • 英文 :


这个问题已经让我抓狂了一段时间,我不确定实际问题是什么。我正在尝试为我的一个应用程序添加拖放功能,特别是将文件从windows资源管理器拖放到应用程序中,以绕过使用FileOpenPicker

我在拖放上观看了MSDN视频(https://channel9.msdn.com/Series/Windows-10-development-for-absolute-beginners/UWP-053-UWP-SoundBoard-Adding-Drag-and-Drop)以及彻底阅读文档(https://learn.microsoft.com/en-us/windows/uwp/design/input/drag-and-drop)。

我创建了以下最基本的示例。

XAML:

<Grid AllowDrop="True"
CanDrag="True"
DragEnter="Grid_DragEnter"
DragLeave="Grid_DragLeave"
DragOver="Grid_DragOver"
Drop="Grid_Drop"
DropCompleted="Grid_DropCompleted"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
</Grid>

代码

private void Grid_DragEnter(object sender, DragEventArgs e)
{
Debug.WriteLine("DragEnter");
}
private void Grid_DragLeave(object sender, DragEventArgs e)
{
Debug.WriteLine("DragLeave");
}
private void Grid_DragOver(object sender, DragEventArgs e)
{
Debug.WriteLine("DragOver");
}
private void Grid_Drop(object sender, DragEventArgs e)
{
Debug.WriteLine("Drop");
}
private void Grid_DropCompleted(UIElement sender, DropCompletedEventArgs args)
{
Debug.WriteLine("DropCompleted");
}

问题是,当将单个或多个文件拖动到应用程序中时,不会触发任何事件。但是,从中拖放UIElements确实会导致事件触发。我还在Appxmanifest中添加了broadFileSystemAccess功能,这并没有改变行为。

那么,如何将Windows资源管理器中的文件拖放功能添加到我的应用程序中呢?有没有声明我失踪了?

  1. 如果您以管理员身份运行VS或应用程序,请拖动&Drop将不起作用(出于安全原因,请参阅此处https://superuser.com/questions/59051/drag-and-drop-file-into-application-under-run-as-administrator

  2. 只要你的网格不包含任何内容,它就不会工作,你的窗口就会得到事件。尝试将背景设置为黑色或任何你喜欢的颜色,你的代码应该可以工作。

最新更新