从“源”到“目标”发生拖动。当源使用 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.Move
和 DragDropEffects.Copy
起作用。
为什么它对 DragDropEffects.Copy
起作用而不首先设置 e.Handled
是任何人的猜测。未记录的条件导致未记录的行为。
我强烈建议您下次发布包含最少可能代码 的代码示例以重现该问题。对于最初的困惑,我深表歉意,但仍然很难弄清楚这其中发生了什么。
关于c# - 为什么即使设置了 Effects = DragDropEffects.None 也允许放置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888182/