我有一个WPF数据网格,用户可以拖放各行来重新排序。但是,我需要一个指示器来显示插入行的位置。
我尝试了各种'hacky'方法,包括检测鼠标移动事件和在鼠标所在位置插入一个空白指示符行。不幸的是,似乎在拖动行时,我的鼠标移动事件都没有被触发。
答案 0 :(得分:1)
UIElement类提供了几个可以使用的事件。 那些是:
前两个是你可以使用的。
<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