Один из способов - переопределить OnRender
UIElement
, как показано в примере MSDN SimpleCircleAdorner .
// A common way to implement an adorner's rendering behavior is to override the OnRender
// method, which is called by the layout system as part of a rendering pass.
protected override void OnRender(DrawingContext drawingContext)
{
Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);
// Some arbitrary drawing implements.
SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
renderBrush.Opacity = 0.2;
Pen renderPen = new Pen(new SolidColorBrush(Colors.Navy), 1.5);
double renderRadius = 5.0;
// Draw a circle at each corner.
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius);
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius);
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius);
drawingContext.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius);
}
}
Если вы хотите обеспечить надежное решение вне типичного прямоугольника или скругленного прямоугольника, вам придется использовать геометрию пути , которая позволит вам построить путь, состоящий из сегментов, таких как BezierSegment
, LineSegment
или ArcSegment
, создавая соответствующий путь вокруг UIElement
.
Если с другой стороны достаточно прямоугольника или скругленного прямоугольника, вы можете использовать DrawingContext.DrawRectangle
и DrawingContext.DrawRoundedRectangle
соответственно в пределах OnRender
переопределения.