Files
DeedyDesigner/DeedyDesigner/Deedy.Activity/Adorner/DragPlacementAdorner.cs
2025-09-18 18:03:00 +08:00

72 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
namespace Deedy.Activity
{
public class DragPlacementAdorner : Adorner
{
private static readonly Pen _PrevPen;
private static readonly Pen _NextPen;
private static readonly Pen _PartPen;
public Dock? Position { get; private set; }
static DragPlacementAdorner()
{
// 定义装饰器的画笔
_PrevPen = new Pen(Brushes.Red, 5.0);
_PrevPen.Freeze();
_NextPen = new Pen(Brushes.Red, 5.0);
_NextPen.Freeze();
_PartPen = new Pen(Brushes.Blue, 3.0);
_PartPen.Freeze();
}
public DragPlacementAdorner(UIElement adornedElement, Dock? dock) : base(adornedElement)
{
this.Position = dock;
IsHitTestVisible = false;
}
protected override void OnRender(DrawingContext drawingContext)
{
var adornedElementRect = new Rect(AdornedElement.RenderSize);
// 根据位置信息绘制不同的视觉效果
switch (this.Position)
{
case Dock.Top:
drawingContext.DrawLine(_PrevPen,
new Point(0, 0),
new Point(adornedElementRect.Right, 0));
break;
case Dock.Bottom:
drawingContext.DrawLine(_NextPen,
new Point(0, adornedElementRect.Bottom),
new Point(adornedElementRect.Right, adornedElementRect.Bottom));
break;
case Dock.Left:
drawingContext.DrawLine(_PrevPen,
new Point(0, 0),
new Point(0, adornedElementRect.Bottom));
break;
case Dock.Right:
drawingContext.DrawLine(_NextPen,
new Point(adornedElementRect.Right, 0),
new Point(adornedElementRect.Right, adornedElementRect.Bottom));
break;
case null:
drawingContext.DrawRectangle(null, _PartPen, adornedElementRect);
break;
default: break;
}
}
}
}