static void CreateDragAdorner() { DataTemplate template = GetDragAdornerTemplate(m_DragInfo.VisualSource); if (template != null) { UIElement rootElement = (UIElement)Application.Current.MainWindow.Content; UIElement adornment = null; if (m_DragInfo.Data is IEnumerable && !(m_DragInfo.Data is string)) { if (((IEnumerable)m_DragInfo.Data).Cast <object>().Count() <= 10) { ItemsControl itemsControl = new ItemsControl(); itemsControl.ItemsSource = (IEnumerable)m_DragInfo.Data; itemsControl.ItemTemplate = template; // The ItemsControl doesn't display unless we create a border to contain it. // Not quite sure why this is... Border border = new Border(); border.Child = itemsControl; adornment = border; } } else { ContentPresenter contentPresenter = new ContentPresenter(); contentPresenter.Content = m_DragInfo.Data; contentPresenter.ContentTemplate = template; adornment = contentPresenter; } if (adornment != null) { adornment.Opacity = 0.5; DragAdorner = new DragAdorner(rootElement, adornment); } } }
static void CreateDragAdorner() { DataTemplate template = GetDragAdornerTemplate(m_DragInfo.VisualSource); if (template != null) { UIElement rootElement = (UIElement)Application.Current.MainWindow.Content; UIElement adornment = null; if (m_DragInfo.Data is IEnumerable && !(m_DragInfo.Data is string)) { if (((IEnumerable)m_DragInfo.Data).Cast<object>().Count() <= 10) { ItemsControl itemsControl = new ItemsControl(); itemsControl.ItemsSource = (IEnumerable)m_DragInfo.Data; itemsControl.ItemTemplate = template; // The ItemsControl doesn't display unless we create a border to contain it. // Not quite sure why this is... Border border = new Border(); border.Child = itemsControl; adornment = border; } } else { ContentPresenter contentPresenter = new ContentPresenter(); contentPresenter.Content = m_DragInfo.Data; contentPresenter.ContentTemplate = template; adornment = contentPresenter; } if (adornment != null) { adornment.Opacity = 0.5; DragAdorner = new DragAdorner(rootElement, adornment); } } }
static void DropTarget_PreviewDragOver(object sender, DragEventArgs e) { DropInfo dropInfo = new DropInfo(sender, e, m_DragInfo, m_Format.Name); IDropTarget dropHandler = GetDropHandler((UIElement)sender); if (dropHandler != null) { dropHandler.DragOver(dropInfo); } else { DefaultDropHandler.DragOver(dropInfo); } // Update the drag adorner. if (dropInfo.Effects != DragDropEffects.None) { if (DragAdorner == null && m_DragInfo != null) { CreateDragAdorner(); } if (DragAdorner != null) { DragAdorner.MousePosition = e.GetPosition(DragAdorner.AdornedElement); DragAdorner.InvalidateVisual(); } } else { DragAdorner = null; } // If the target is an ItemsControl then update the drop target adorner. if (sender is ItemsControl) { UIElement adornedElement = ((ItemsControl)sender).GetVisualDescendent <ItemsPresenter>(); if (adornedElement == null) { adornedElement = ((ItemsControl)sender).GetVisualDescendents <Panel>().FirstOrDefault(p => p.IsItemsHost); } if (dropInfo.DropTargetAdorner == null) { DropTargetAdorner = null; } else if (!dropInfo.DropTargetAdorner.IsInstanceOfType(DropTargetAdorner)) { DropTargetAdorner = DropTargetAdorner.Create(dropInfo.DropTargetAdorner, adornedElement); } if (DropTargetAdorner != null) { DropTargetAdorner.DropInfo = dropInfo; DropTargetAdorner.InvalidateVisual(); } } e.Effects = dropInfo.Effects; e.Handled = !dropInfo.IsNotHandled; // Allows bubbling Scroll((DependencyObject)sender, e); }