编写拖动效果装饰器与状态回显装饰器

This commit is contained in:
于智纯
2025-09-07 20:41:19 +08:00
parent f6b97e01b8
commit 7212a7dea7
4 changed files with 142 additions and 8 deletions

View File

@@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RazorEngineTest
{
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;
public class DropPlacementAdorner : Adorner
{
private readonly string _position;
private static readonly Pen _pen;
static DropPlacementAdorner()
{
// 定义装饰器的画笔
_pen = new Pen(Brushes.Red, 5.0);
_pen.Freeze();
}
public DropPlacementAdorner(UIElement adornedElement, string position)
: base(adornedElement)
{
_position = position;
IsHitTestVisible = false;
}
protected override void OnRender(DrawingContext drawingContext)
{
var adornedElementRect = new Rect(AdornedElement.RenderSize);
// 根据位置信息绘制不同的视觉效果
switch (_position)
{
case "上":
drawingContext.DrawLine(_pen,
new Point(0, 0),
new Point(adornedElementRect.Right, 0));
break;
case "下":
drawingContext.DrawLine(_pen,
new Point(0, adornedElementRect.Bottom),
new Point(adornedElementRect.Right, adornedElementRect.Bottom));
break;
case "左":
drawingContext.DrawLine(_pen,
new Point(0, 0),
new Point(0, adornedElementRect.Bottom));
break;
case "右":
drawingContext.DrawLine(_pen,
new Point(adornedElementRect.Right, 0),
new Point(adornedElementRect.Right, adornedElementRect.Bottom));
break;
case "中":
drawingContext.DrawRectangle(null, _pen, adornedElementRect);
break;
default:break;
}
}
}
}