c# - 为什么即使设置了 Effects = DragDropEffects.None 也允许放置?

标签 c# wpf drag-and-drop

从“源”到“目标”发生拖动。当源使用 allowedEffects 作为 DragDropEffects.Copy 调用 DoDragDrop() 时,我可以通过在目标(在 DragOver 事件中)设置 Effects = DragDropEffects.None 来取消放置。

但是当我将 allowedEffects 设置为 DragDropEffects.Move 时,同样的情况失败了。

要重现这种情况,请从 http://jaimersamples.members.winisp.net/samples/dragdrop/drag.zip 下载示例。

更改行..(到 DragDropEffects.Move)

DragDrop.DoDragDrop(this.DragSource, data, DragDropEffects.Copy);

添加行..

void Window1_DragOver(object sender, DragEventArgs args)
{
   args.Effects = DragDropEffects.None;

同时注释掉整个 DragSource_GiveFeedback..

void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
    //System.Diagnostics.Debug.WriteLine("DragSource_GiveFeedback " + e.Effects.ToString());

框架中是否存在某种错误,或者我只是无法看到明显的东西?

最佳答案

再次查看您的评论和代码后,经过一些努力,我能够理解并重现您正在谈论的问题。

你缺少的是行:

e.Handled = true;

在您的 Window1_DragOver 事件中。添加它,它将对 DragDropEffects.MoveDragDropEffects.Copy 起作用。

为什么它对 DragDropEffects.Copy 起作用而不首先设置 e.Handled 是任何人的猜测。未记录的条件导致未记录的行为。

我强烈建议您下次发布包含最少可能代码 的代码示例以重现该问题。对于最初的困惑,我深表歉意,但仍然很难弄清楚这其中发生了什么。

关于c# - 为什么即使设置了 Effects = DragDropEffects.None 也允许放置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888182/

相关文章:

javascript - 使用 jQuery 拖放防止点击事件

javascript - 在 javascript 中检测 HTML5 拖放支持

c# - C#中的双字节字符串比较

c# - 如何声明一个带有连字符的变量

wpf - 为什么使用 CollectionViewSource.SortDescriptions 排序很慢?

c# - 为什么这个 DataTrigger 不起作用?

c# - 如何为每个 StackPanel 项目设置单独的工具提示?

c# - 通过在 C# GUI 中按下按钮调用 C++ DLL

c# - 具有 'normal' 接口(interface)的 WCF 异步实现

javascript - 拖放填充空白