mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-12 04:06:36 +08:00
76 lines
2.3 KiB
C#
76 lines
2.3 KiB
C#
using System.Windows.Documents;
|
|
using System.Windows;
|
|
using System.Windows.Media;
|
|
|
|
namespace GongSolutions.Wpf.DragDrop
|
|
{
|
|
internal class DragAdorner : Adorner
|
|
{
|
|
public DragAdorner(UIElement adornedElement, UIElement adornment, Point translation, DragDropEffects effects = DragDropEffects.None)
|
|
: base(adornedElement)
|
|
{
|
|
this._translation = translation;
|
|
this.m_AdornerLayer = AdornerLayer.GetAdornerLayer(adornedElement);
|
|
this.m_AdornerLayer.Add(this);
|
|
this.m_Adornment = adornment;
|
|
this.IsHitTestVisible = false;
|
|
this.Effects = effects;
|
|
}
|
|
|
|
public DragDropEffects Effects { get; private set; }
|
|
|
|
public Point MousePosition
|
|
{
|
|
get { return this.m_MousePosition; }
|
|
set
|
|
{
|
|
if (this.m_MousePosition != value)
|
|
{
|
|
this.m_MousePosition = value;
|
|
this.m_AdornerLayer.Update(this.AdornedElement);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Detatch()
|
|
{
|
|
this.m_AdornerLayer.Remove(this);
|
|
}
|
|
|
|
protected override Size ArrangeOverride(Size finalSize)
|
|
{
|
|
this.m_Adornment.Arrange(new Rect(finalSize));
|
|
return finalSize;
|
|
}
|
|
|
|
public override GeneralTransform GetDesiredTransform(GeneralTransform transform)
|
|
{
|
|
var result = new GeneralTransformGroup();
|
|
result.Children.Add(base.GetDesiredTransform(transform));
|
|
result.Children.Add(new TranslateTransform(this.MousePosition.X + this._translation.X, this.MousePosition.Y + this._translation.Y));
|
|
|
|
return result;
|
|
}
|
|
|
|
protected override Visual GetVisualChild(int index)
|
|
{
|
|
return this.m_Adornment;
|
|
}
|
|
|
|
protected override Size MeasureOverride(Size constraint)
|
|
{
|
|
this.m_Adornment.Measure(constraint);
|
|
return this.m_Adornment.DesiredSize;
|
|
}
|
|
|
|
protected override int VisualChildrenCount
|
|
{
|
|
get { return 1; }
|
|
}
|
|
|
|
private readonly AdornerLayer m_AdornerLayer;
|
|
private readonly UIElement m_Adornment;
|
|
private Point m_MousePosition;
|
|
private Point _translation;
|
|
}
|
|
} |