private static void RowDragOnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) { //Get row index from click //Adapted from https://social.msdn.microsoft.com/Forums/vstudio/en-US/22373fc7-c677-46a1-80ff-3e262836ecc1/right-click-in-wpf-datagrid?forum=wpf DataGrid g = sender as DataGrid; Point p = mouseButtonEventArgs.GetPosition(g); if (g == null) { return; } DataGridRow selectedRow = GetRowFromPoint(g, p); if (selectedRow == null) { return; } //Prevent user from reordering processes not marked as orderable var isDraggable = (selectedRow.Item as CompileProcess)?.IsDraggable; if (isDraggable != null && !(bool)isDraggable) { return; } RowDragHelper.SetDraggedItem((DataGrid)sender, selectedRow.Item); }
private static void RowDragOnPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs mouseButtonEventArgs) { var draggedItem = RowDragHelper.GetDraggedItem(sender as DependencyObject); if (draggedItem == null) { return; } //disabled because it seems to glitch out when 2 custom programs are swapped //ExchangeRows(sender, ((DataGrid) sender).SelectedItem); ((DataGrid)sender).SelectedItem = draggedItem; RowDragHelper.SetDraggedItem(sender as DataGrid, null); }