2015-11-06 71 views
0

我有一個WPF數據網格,用戶可以在其中拖放各種行來重新排序它們。但是,我需要一個指示器來顯示行將被插入的位置。WPF datagrid拖放目標指標

我已經嘗試了各種各樣的'hacky'方法,包括檢測鼠標移動事件並在鼠標所在處插入空白指示器行。不幸的是,在拖動行時,似乎沒有任何鼠標移動事件被觸發。

回答

1

UIElement類提供了幾個可以使用的事件。 這些都是:

  • 的dragenter
  • 的dragover
  • DragLeave

前兩個是一個你可以使用。

<DataGrid DragOver="MyGrid_DragOver" 
      DragEnter="MyGrid_DragEnter" 

我不得不同時使用這兩個工具來進行拖放操作。 (你的DataGrid)

private void MyGrid_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.LeftButton == MouseButtonState.Pressed) 
    {  
     var dragSource = ...; 
     var data = ...; 
     DragDrop.DoDragDrop(dragSource, data, DragDropEffects.Move); 
    } 
} 


然後你的代碼在目標控制事件處理程序:


我的反應,此舉mouve事件開始拖動操作

private void MyGrid_DragOver(object sender, DragEventArgs e) 
{ 
    this.DragOver_DragEnter(sender, e); 
} 

private void MyGrid_DragEnter(object sender, DragEventArgs e) 
{ 
    this.DragOver_DragEnter(sender, e); 
} 

然後你ca n設置Effects屬性格式給予視覺反饋給用戶:

private void DragOver_DragEnter(object sender, DragEventArgs e) 
{ 
    // code here to decide whether drag target is ok 

    e.Effects = DragDropEffects.None; 
    e.Effects = DragDropEffects.Move; 
    e.Effects = DragDropEffects.Copy; 
    e.Handled = true; 
    return; 
} 


退房MSDN上的這種反應太:Giving drag and drop feedback using DragEventArgs.Effect