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); } }