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

标签 wpf drag-and-drop

在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

关于wpf - 如果打开对话框,则始终启用WPF拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429685/

相关文章:

java - 在 swing 中将节点从 Jtree 拖到操作系统

javascript - 从中心抓取并移动元素

WPF ListView 数据绑定(bind)拖/放自动滚动

javascript - 调整窗口大小时,可拖动对象会移出容器

wpf - 在 WPF ViewModel 中将对象(不是实体,不是框架)标记为脏

wpf - 将 IsEnabled 的约定添加到 Caliburn.Micro

c# - WPF c#,将数据网格列与代码隐藏在一起

c# - WPF MVVM : Display View for DataGrid's SelectedItem

c# - 从文本框复制后,重音字符无法正确显示

Javafx 在 Canvas 上拖放形状