using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Media; namespace TeamAAS.FlowEditor.Controls { public class DragAdorner : Adorner { private readonly Border _child; private TranslateTransform _transform = new TranslateTransform(); public DragAdorner(UIElement adornedElement, Border child) : base(adornedElement) { _child = child; _child.Opacity = 0.7; _child.IsHitTestVisible = false; _child.RenderTransform = _transform; AddVisualChild(_child); } public void SetPosition(double x, double y) { _transform.X = x; _transform.Y = y; InvalidateVisual(); } /// 显示/隐藏预览(移出画布时隐藏) public void SetVisible(bool visible) { _child.Visibility = visible ? Visibility.Visible : Visibility.Collapsed; } protected override Visual GetVisualChild(int index) => _child; protected override int VisualChildrenCount => 1; protected override Size MeasureOverride(Size constraint) { _child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); return _child.DesiredSize; } protected override Size ArrangeOverride(Size finalSize) { _child.Arrange(new Rect(finalSize)); return finalSize; } protected override Geometry GetLayoutClip(Size layoutSlotSize) => null; } }