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

发布于 2024-12-04 11:36:03 字数 301 浏览 3 评论 0原文

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

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

没问题,一切正常。

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

In my WPF application, I implemented drag & drop to open files from Windows Explorer
using

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

no problem, everything works fine.

But if a dialog box is open
I can always do Drag/Drop files from Windows Explorer into the main window of my application.
Have you ever encountered this problem? Can you help me solve it? Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

拥抱我好吗 2024-12-11 11:36:03

如果您的对话框是模态,则禁用父窗口。可以使用

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);
}

(我不是WPF专家,但是 stackoverflow.com/a/6363095/9156214

If your dialog box is a modal one, it disables the parent window. This can be checked using the IsWindowEnabled API call. (I am no WPF expert, but the .IsEnabled or .Focusable properties do not seem to work this way.)

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);
}

see also https://stackoverflow.com/a/6363095/9156214

若水微香 2024-12-11 11:36:03

当对话框打开时,禁止拖放到主窗体上。确保打开模式对话框(ShowDialog 而不是 Show)。

When the dialog box opens, disallow dropping on your main form. Make sure you open a modal dialog (ShowDialog instead of Show).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文