В данный момент я просто программирую некоторые D & D dataGrid, и единственный найденный способ сделать то, что вы просите, - это установить прослушиватель Drop на каждый dataGridColumnHeader и на каждый DataGridCell.
, как япишите, у меня есть прослушиватели Drop в моих ячейках, dataGridColumnHeaders и datagrids (для удаления фона сетки данных, если у вас недостаточно строк / столбцов для заполнения DG).
теслушатели получают индекс Row / col ячейки, где он применяется, используя что-то вроде myDataGrid.Columns.IndexOf(((DataGridCell)sender).Column)
в слушателе отбрасывания ячеек, а затем вызывают общий метод в классе моего DG.
это на самом деле не так беспорядочно, как вы думаете.
edit: относительно вашего комментария: «Но как прикрепить обработчик события к заголовку DataGrid?»
в вашем MyDataGrid.xaml, например:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<EventSetter Event="DropEvent" Handler="ColumnHeaderDropHandler" />
</Style>
</DataGrid.ColumnHeaderStyle>
и, конечно, вам нужно реализовать ColumnHeaderDropHandler в своем коде позади.