在 WPF 设置中 DragOver 中的 e.Effects 不起作用 - 为啥?

Posted

技术标签:

【中文标题】在 WPF 设置中 DragOver 中的 e.Effects 不起作用 - 为啥?【英文标题】:In WPF setting e.Effects in DragOver doesn't work - why?在 WPF 设置中 DragOver 中的 e.Effects 不起作用 - 为什么? 【发布时间】:2011-09-20 04:32:59 【问题描述】:

我是 WPF 的新手。我在 TreeView 中实现 Drag&Drop 并且我的 DragOver 事件处理程序不起作用。

<Style TargetType="TreeViewItem">
    <!-- ... -->
    <EventSetter Event="DragOver" Handler="item_DragOver" />
</Style>
void item_DragOver(object sender, DragEventArgs e)

    if (!e.Data.GetDataPresent("someFormat") || e.Source == sender)
        e.Effects = DragDropEffects.None;                
    else if (e.KeyStates == DragDropKeyStates.ControlKey)
        e.Effects = DragDropEffects.Copy;
    else
        e.Effects = DragDropEffects.Move;

    e.Handled = true;

当程序在拖动某些树项目时运行时,它始终显示“移动”拖动图标,即使我按下 Ctrl 键也是如此。我想一些默认事件处理程序会覆盖我的 e.Effects,但我不知道在哪里可以搜索它。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我找到了,检查ctrl键是否按下正确的方法是:

if ((e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey)

【讨论】:

以上是关于在 WPF 设置中 DragOver 中的 e.Effects 不起作用 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF 文本框中删除文件

WPF实现Drag/Drop操作

如何在 dragover/dragenter HTML 5 拖放期间更改图标

解决WPF中TextBox文件拖放问题

从 WinForms 拖放到 WPF 问题

HTML5: dragover(), drop(): 如何获取当前 x,y 坐标?