C# 在Drop事件中未正确设置WPF DragDropEffects
我正在尝试在我的应用程序中拖放一些数据。如果未按下控制键,我希望DragDropEffects为C# 在Drop事件中未正确设置WPF DragDropEffects,c#,.net,wpf,C#,.net,Wpf,我正在尝试在我的应用程序中拖放一些数据。如果未按下控制键,我希望DragDropEffects为Move,如果按下控制键,则为Copy。看起来这应该是微不足道的,但我已经搜索了很多,还没有找到答案 以下是我的代码,大致基于: e.Effects在dropTarget\u DragOver中设置得很好。每当我按下control键时,鼠标光标会添加一个“+”图标。但是,在Drop事件中,e.Effects再次等于DragDropEffects.All。为什么会这样?如何使e.Effects在Drop
Move
,如果按下控制键,则为Copy
。看起来这应该是微不足道的,但我已经搜索了很多,还没有找到答案
以下是我的代码,大致基于:
e.Effects
在dropTarget\u DragOver
中设置得很好。每当我按下control键时,鼠标光标会添加一个“+”图标。但是,在Drop
事件中,e.Effects
再次等于DragDropEffects.All
。为什么会这样?如何使e.Effects
在Drop
事件中等于不同的值?或者这可能吗
private static void dropTarget_Drop(object sender, DragEventArgs e)
{
if (e.Effects == DragDropEffects.None || !e.Data.GetDataPresent(DataFormats.FileDrop))
return;
var effects = e.Effects;
// effects == DragDropEffects.All, but I want it to have the Move or Copy flag removed
}
旁白:另一件事是我使用的是
键盘.IsKeyDown
而不是e.KeyStates
,因为e.KeyStates
似乎总是等于DragDropKeyStates.LeftMouseButton
。DragDropKeyStates.ControlKey
位始终为0,即使按下了control。知道原因吗?您应该在Drop函数中复制DragOver函数中的逻辑,以再次确定效果
与其从DragEventArgs读取效果字段,不如将其写回。该值被传递回源,是函数DoDragDrop的返回值
这或多或少是由Microsoft在中描述的
,但这种行为并不明显。我犯了和你一样的错误。@Okuma.Scott谢谢,我已经改正了。
private static void dropTarget_Drop(object sender, DragEventArgs e)
{
if (e.Effects == DragDropEffects.None || !e.Data.GetDataPresent(DataFormats.FileDrop))
return;
var effects = e.Effects;
// effects == DragDropEffects.All, but I want it to have the Move or Copy flag removed
}