【问题标题】:Drag and Drop events not firing when trying to drag and drop files尝试拖放文件时未触发拖放事件
【发布时间】:2021-02-05 20:08:27
【问题描述】:

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

我观看了有关拖放 (https://channel9.msdn.com/Series/Windows-10-development-for-absolute-beginners/UWP-053-UWP-SoundBoard-Adding-Drag-and-Drop) 的 MSDN 视频,并彻底阅读了文档 (https://docs.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 资源管理器拖放到我的应用程序中?有没有我遗漏的声明?

【问题讨论】:

  • 我建议尝试来自here 的样本。如果它的行为符合您的预期,请查看源代码。我认为您的示例应该按原样工作,我也很好奇为什么事件没有触发。
  • @jegtugado 我也复制并粘贴了该代码,并且具有完全相同的行为。拖放事件根本没有触发。

标签: c# uwp


【解决方案1】:
  1. 如果您以管理员身份运行 VS 或您的应用程序拖放将无法工作(出于安全原因,请参阅此处https://superuser.com/questions/59051/drag-and-drop-file-into-application-under-run-as-administrator

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

【讨论】:

  • 谢谢!这解决了它。我禁用了 UAC,它反过来以管理员身份运行所有内容。重新打开 UAC 解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2014-04-27
  • 2013-04-15
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2020-06-19
相关资源
最近更新 更多