Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Drop事件中未正确设置WPF DragDropEffects_C#_.net_Wpf - Fatal编程技术网

C# 在Drop事件中未正确设置WPF 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

我正在尝试在我的应用程序中拖放一些数据。如果未按下控制键,我希望DragDropEffects为
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
}