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 ExchangeRows(object sender, object target) { var draggedRow = RowDragHelper.GetDraggedItem(sender as DependencyObject); if (draggedRow == null) { return; } if (target != null && !ReferenceEquals(draggedRow, target)) { var list = ((DataGrid)sender).ItemsSource as IList; if (list == null) { return; } int oldIndex = list.IndexOf(draggedRow); var targetIndex = list.IndexOf(target); list.Remove(draggedRow); list.Insert(targetIndex, draggedRow); //Console.WriteLine("Row Switch"); RowSwitchEventArgs args = new RowSwitchEventArgs() { PrimaryRowIndex = targetIndex, DisplacedRowIndex = oldIndex }; OnRowSwitch(args); } }
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); }
private static void RowDragOnMouseMove(object sender, MouseEventArgs mouseEventArgs) { var draggedRow = RowDragHelper.GetDraggedItem(sender as DependencyObject); DataGrid g = sender as DataGrid; if (draggedRow == null || g == null) { return; } var targetRow = GetRowFromPoint(g, mouseEventArgs.GetPosition(g)); if (targetRow == null) { return; } ExchangeRows(g, targetRow.Item); }