4

我有一个处理拖放的自定义 WPF 控件。我重写 OnDragOver 以便控件在忙于执行其他操作时不会接受放置的对象:

protected override void OnDragOver(DragEventArgs e)
{
     base.OnDragOver(e);

     if (isBusy)     
          e.Effects = DragDropEffects.None;
     else
          e.Effects = DragDropEffects.Move;

     e.Handled = true;
}

在另一个启动拖放的控件中,有一些 UI 元素在操作开始时被禁用,如果操作被取消或在目标上释放鼠标时应该启用,而上述目标表示不允许操作。

我可以在源代码管理中使用哪些事件来检查第二个条件?

4

2 回答 2

3

正如Hans Passant 在评论中回答的那样,要检查操作是否被取消,您可以使用返回值DragDropEffects, of DragDrop.DoDragDrop()

无:放置目标不接受数据。

复制:将数据复制到放置目标。

移动:将拖动源中的数据移动到放置目标。

链接:来自拖动源的数据链接到放置目标。

滚动:滚动即将开始或当前正在放置目标中发生。

全部:数据被复制,从拖动源中删除,并在放置目标中滚动。

None是您感兴趣的值。当鼠标松开时,操作将被取消,并DoDragDrop()返回None

于 2013-05-24T12:16:43.883 回答
0

在 WPF 拖放过程中,GiveFeedback 事件不断在拖动源上触发,您可以检查事件参数状态并相应地更新拖动源。

这是一个代码示例:(假设被拖动的元素称为dragSource)

// Attach the event handler
dragSource += OnDragSourceGiveFeedback;

// Event Handler
private void OnDragSourceGiveFeedback(object sender, GiveFeedbackEventArgs e)
    {
        if (e.Effects == DragDropEffects.None)
        {
            // Drop is not allowed on the Drop Target
            dragSource.IsEnabled = false;
        }
    }
于 2013-01-24T19:04:48.640 回答