如果打开一个对话框,则始终启用WPF Drag& Drop

时间:2011-09-15 10:56:22

标签: wpf drag-and-drop

在我的WPF应用程序中,我实现了拖放功能。从Windows资源管理器中删除打开文件 使用

  • AllowDrop="True"
  • DragOver="MainWindow_DragOver"
  • Drop="MainWindow_Drop"

没问题,一切正常。

但是如果打开一个对话框 我总是可以将Windows资源管理器中的拖放文件拖放到我的应用程序的主窗口中。 你有没有遇到过这个问题?你能帮我解决一下吗?谢谢

2 个答案:

答案 0 :(得分:1)

如果您的对话框是模态对话框,则会禁用父窗口。这可以使用IsWindowEnabled API call进行检查。 (我不是WPF专家,但.IsEnabled或.Focusable属性似乎没有这种方式。)

void MainWindow_DragOver(object sender, DragEventArgs e)
{
    bool isEnabled = NativeMethods.IsWindowEnabled(new WindowInteropHelper(this).Handle);
    e.Effects = isEnabled ? DragDropEffects.Copy :  DragDropEffects.None;
    e.Handled = true;
}

class NativeMethods
{
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool IsWindowEnabled(IntPtr hWnd);
}

另见https://stackoverflow.com/a/6363095/9156214

答案 1 :(得分:0)

当对话框打开时,不允许删除主表单。确保打开模态对话框(ShowDialog而不是Show)。