如果打开一个对话框,则始终启用WPF拖放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果打开一个对话框,则始终启用WPF拖放相关的知识,希望对你有一定的参考价值。

在我的WPF应用程序中,我使用拖放操作从Windows资源管理器中打开文件

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

没问题,一切正常。

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

答案

如果对话框是模态对话框,则会禁用父窗口。这可以使用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

另一答案

对话框打开后,禁止删除主窗体。确保打开模态对话框(ShowDialog而不是Show)。

以上是关于如果打开一个对话框,则始终启用WPF拖放的主要内容,如果未能解决你的问题,请参考以下文章

如何在打开对话框时禁用拖放

wpf应用程序中的图像拖放

对话框片段包始终为空

启用文本框时如何触发新的验证?

如何在回收站视图上启用和禁用拖放

从另一个片段打开一个片段始终保留前一个片段标题