// Creates or updates the DropAdorner. private void UpdateDropAdorner(FrameworkElement adornedElement, bool isVertical, bool insertAfter) { // Remove the old adorner if adorner is shown on wrong item container. if (_dropAdorner != null && _dropAdorner.AdornedElement != adornedElement) { RemoveDropAdorner(); } if (adornedElement == null) { return; } // Create new adorner if necessary. if (_dropAdorner == null) { // We need to get the AdornerLayer of the ItemContainer and not the ItemsControl. // The ItemsControl could contain a ScrollContentPresenter with its own // AdornerLayer. If we would use the AdornerLayer of the Window, then the drop // adorner could render over the scroll bar of the ItemsControl. _dropAdorner = new DropAdorner(isVertical, insertAfter, adornedElement); var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); adornerLayer?.Add(_dropAdorner); } // Update the position of the adorner. if (_dropAdorner != null) { _dropAdorner.InsertAfter = insertAfter; _dropAdorner.InvalidateVisual(); } }
private void RemoveDropAdorner() { if (_dropAdorner != null) { var adornerLayer = AdornerLayer.GetAdornerLayer(_dropAdorner.AdornedElement); adornerLayer?.Remove(_dropAdorner); _dropAdorner = null; } }
// Creates or updates the DropAdorner. private void UpdateDropAdorner(FrameworkElement adornedElement, bool isVertical, bool insertAfter) { // Remove the old adorner if adorner is shown on wrong item container. if (_dropAdorner != null && _dropAdorner.AdornedElement != adornedElement) RemoveDropAdorner(); if (adornedElement == null) return; // Create new adorner if necessary. if (_dropAdorner == null) { // We need to get the AdornerLayer of the ItemContainer and not the ItemsControl. // The ItemsControl could contain a ScrollContentPresenter with its own // AdornerLayer. If we would use the AdornerLayer of the Window, then the drop // adorner could render over the scroll bar of the ItemsControl. _dropAdorner = new DropAdorner(isVertical, insertAfter, adornedElement); var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); adornerLayer?.Add(_dropAdorner); } // Update the position of the adorner. if (_dropAdorner != null) { _dropAdorner.InsertAfter = insertAfter; _dropAdorner.InvalidateVisual(); } }