- 您需要抽象 Adorner 类的子类。
- 我已经覆盖了 OnRender 来绘制指南/插入符号(一些几何图形没什么特别的线)
- 我在 Adorner 上有一个公共属性,DataGrid 在其上绘制装饰器
- 具有两个参数的公共方法 SetMousePosition:鼠标悬停的 MouseCoords + DataGridRow。我使用这些数据来确定在 DataRow 上方或下方绘制指南/插入符号的位置,但您在 DataGrid 的可视区域中绘制。我做了一些额外的计算来确定该项目是否需要在之前或之后插入等。
如果您有自定义装饰器,现在可以将其添加到 DataGrid 的装饰器层:
var adornerLayer = AdornerLayer.GetAdornerLayer(_dataGrid);
adornerLayer.Add(_dragGuide);
但是,无论出于何种原因,您需要在拖动操作结束后立即将其删除,否则指南/插入符号仍然可见:
var adornerLayer = AdornerLayer.GetAdornerLayer(_dataGrid);
adornerLayer.Remove(_dragGuide);
如果你有这个,那么你可以开始处理所有的例外情况: 在所有列左侧的区域中删除行 在行所在的区域下方删除行。Dropping 不完全可见的行(底部或上部滚动到看不见的地方) 从窗口的不同实例拖放。等等等等
最后,大多数用户并不喜欢辛勤的工作,因为他们不知道可以拖放,或者他们更喜欢使用按钮。
但我希望上面能给你一个启动。
啊,我忘记了这个对我有帮助的链接:MSDN doc: Adorners overview