如果打开一个对话框,则始终启用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拖放的主要内容,如果未能解决你的问题,请参考以下文章