2012-07-09 115 views
2

我有一個自定義的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元素的操作開始時如果操作被取消或者當鼠標在目標上被釋放,而上述目標表示操作不被允許時,應該被啓用。

我可以在源代碼控件上使用哪些事件來檢查第二個條件?

+3

只需使用DoDragDrop()的返回值即可。如果由於任何原因導致放棄不成功,您將得到DragDropEffects.None。 – 2012-07-09 22:00:11

回答

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; 
     } 
    } 
2

Hans Passant answered in a comment如,檢查操作是否被取消可以使用return value, DragDropEffects,的DragDrop.DoDragDrop()

無:下降目標不接受數據。

複製:將數據複製到放置目標。

移動:來自拖動源的數據移動到放置目標。

鏈接:來自拖動源的數據鏈接到放置目標。

滾動:滾動即將開始或當前正在發生在 放置目標中。

全部:複製數據,從拖動源中刪除數據,並在放置目標中滾動。

None是你感興趣的值,當鼠標被釋放時,操作將被取消,並DoDragDrop()將返回None