WPF datagrid拖放目标指标

时间:2015-11-06 17:31:31

标签: c# wpf datagrid drag-and-drop

我有一个WPF数据网格,用户可以拖放各行来重新排序。但是,我需要一个指示器来显示插入行的位置。

我尝试了各种'hacky'方法,包括检测鼠标移动事件和在鼠标所在位置插入一个空白指示符行。不幸的是,似乎在拖动行时,我的鼠标移动事件都没有被触发。

1 个答案:

答案 0 :(得分:1)

UIElement类提供了几个可以使用的事件。 那些是:

  • dragEnter事件
  • 的dragover
  • DragLeave
  • 掉落

前两个是你可以使用的。

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

我不得不用两者来拖延工作。


我通过对一个移动mouve事件做出反应来启动Drag操作:

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


然后编写目标控件(您的DataGrid)上的事件处理程序:

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

然后,您可以设置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