public SelectedItemsAdorner(UIElement adornedElement)
            : base(adornedElement)
        {
            _canvas = new SelfCenteredCanvas()
            {
                Opacity             = 0.3,
                Visibility          = System.Windows.Visibility.Visible,
                Background          = Brushes.Transparent,
                HorizontalAlignment = HorizontalAlignment.Stretch,
                VerticalAlignment   = VerticalAlignment.Stretch,
            };


            this.AddLogicalChild(_canvas);
            this.AddVisualChild(_canvas);

            IsHitTestVisible = false;
        }
        private static void OnItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var   adorner         = d as SelectedItemsAdorner;
            Point initialPosition = adorner.CurrentPosition;
            var   draggables      = adorner.Items
                                    .OfType <IDraggable>()
                                    .Where(pa => pa is IPositionAware)
                                    .Where(ipa => ipa.IsDragging).ToArray();

            adorner._canvas.Children.Clear();
            foreach (var item in draggables.Cast <IPositionAware>())
            {
                Vector           offset = item.GetMiddlePoint() - initialPosition;
                ContentPresenter cc     = new ContentPresenter()
                {
                    Content = item
                };
                SelfCenteredCanvas.SetOffsetX(cc, offset.X);
                SelfCenteredCanvas.SetOffsetY(cc, offset.Y);
                adorner._canvas.Children.Add(cc);
            }
        }