1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| public delegate Point GetPosition(IInputElement element);
private void dataGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
int indexDrag = -1;
try
{
GetCurrentRowIndex(e.GetPosition);
}
catch
{
indexDrag = -1;
}
if(indexDrag >= 0)
{
_startPoint = e.GetPosition(null);
}
}
private void dataGrid1_PreviewMouseMove(object sender, MouseEventArgs e)
{
try
{
if (e.LeftButton == MouseButtonState.Pressed && !IsDragging)
{
Point position = e.GetPosition(null);
if (Math.Abs(position.X - _startPoint.X) > SystemParameters.MinimumHorizontalDragDistance ||
Math.Abs(position.Y - _startPoint.Y) > SystemParameters.MinimumVerticalDragDistance)
{
StartDrag(e);
}
}
}
catch { }
}
private void StartDrag(MouseEventArgs e)
{
try
{
IsDragging = true;
indexDrag = GetCurrentRowIndex(e.GetPosition);
Point position = e.GetPosition(null);
// this.photo.Margin = new Thickness(position.X, position.Y, 0, 0);
// this.photo.Source = calculs.GetImageSourceFromString(_Data[indexDrag].Joueur.GetLinkImage());
DataObject data = new DataObject(System.Windows.DataFormats.Text.ToString(), indexDrag);
DragDropEffects de = DragDrop.DoDragDrop(this.dataGrid1, data, DragDropEffects.Move);
IsDragging = false;
}
catch
{
}
}
private int GetCurrentRowIndex(GetPosition pos)
{
int curIndex = -1;
for (int i = 0; i < _Data.Count; i++)
{
DataGridRow itm = GetRowItem(i);
if (GetMouseTargetRow(itm, pos))
{
curIndex = i;
break;
}
}
return curIndex;
}
private bool GetMouseTargetRow(Visual theTarget, GetPosition position)
{
Rect rect = VisualTreeHelper.GetDescendantBounds(theTarget);
Point point = position((IInputElement)theTarget);
return rect.Contains(point);
}
private DataGridRow GetRowItem(int index)
{
if (this.dataGrid1.ItemContainerGenerator.Status
!= GeneratorStatus.ContainersGenerated)
return null;
return dataGrid1.ItemContainerGenerator.ContainerFromIndex(index)
as DataGridRow;
} |
Partager