private void AssociateObject_PreviewDragEnter(object sender, DragEventArgs e)
 {
     if (AssociatedObject.ItemTemplate != null)
     {
         if (_dragVisual == null)
         {
             FrameworkElement source    = sender as FrameworkElement;
             Point            dragStart = DragManager.DragStartPosition;
             FrameworkElement dragItem  = GetItemContainerFromPoint(AssociatedObject, dragStart) as FrameworkElement;
             Point            itemPos   = dragItem.TranslatePoint(new Point(), source);
             Point            position  = e.GetPosition(source);
             Point            offset    = new Point(dragStart.X - itemPos.X, dragStart.Y - itemPos.Y);
             Size             size      = new Size(dragItem.ActualWidth, dragItem.ActualHeight);
             IList            data      = DragDataManager.GetData(e.Data);
             _dragVisual = new DragVisual(data, source, AssociatedObject.ItemTemplate, offset, size);
         }
         e.Handled = true;
     }
 }
Exemple #2
0
        private void AssociatedObject_OnDragInitialize(object sender, DragInitializeEventArgs e)
        {
            e.Effects = DragDropEffects.All;
            IList selectedItems = GetSelectedItemsAsList(AssociatedObject);

            if (selectedItems.Count > 0)
            {
                if (GetItemContainerFromPoint(AssociatedObject, e.DragStartPosition) is FrameworkElement item)
                {
                    Point mousePos = e.GetPosition(AssociatedObject);
                    Point itemPos  = item.TranslatePoint(new Point(), AssociatedObject);
                    Point offset   = new Point(mousePos.X - itemPos.X, mousePos.Y - itemPos.Y);
                    e.DragVisualSize   = new Size(item.ActualWidth, item.ActualHeight);
                    e.DragVisualOffset = offset;
                    e.Data             = DragDataManager.GenerateDataObject(selectedItems);
                }
                else
                {
                    AssociatedObject.SelectedItems.Clear();
                }
            }
        }