UIElement 위에 정보, 기능 등을 표시하기 위해 사용하는 사용자 지정 FrameworkElement
Adorner는 UIElement 내에 AdornerLayer를 생성하여 그 위에 객체를 배치하므로 어떤 객체들보다 상위에 나타난다.
(Z-inddex 등을 조절하는 것보다 편한 방법)
Adorner |
모든 구체적인 표시기 구현이 상속받는 추상 기본 클래스 |
AdornerLayer |
하나 이상의 표시한 요소의 표시기에 대한 렌더링 계층을 나타내는 클래스 |
AdornerDecorator |
표시기 계층이 요소 컬렉션에 연결될 수 있도록 하는 클래스 |
MSDN
// Adorners must subclass the abstract base class Adorner.
public class SimpleCircleAdorner : Adorner
{
// Be sure to call the base class constructor.
public SimpleCircleAdorner(UIElement adornedElement)
: base(adornedElement)
{
}
// 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 dc)
{
Rect adornedElementRect = new Rect(this.AdornedElement.DesiredSize);
// Some arbitrary drawing implements.
var 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.
dc.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopLeft, renderRadius, renderRadius);
dc.DrawEllipse(renderBrush, renderPen, adornedElementRect.TopRight, renderRadius, renderRadius);
dc.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomLeft, renderRadius, renderRadius);
dc.DrawEllipse(renderBrush, renderPen, adornedElementRect.BottomRight, renderRadius, renderRadius);
}
}
myAdornerLayer = AdornerLayer.GetAdornerLayer(myTextBox);
myAdornerLayer.Add(new SimpleCircleAdorner(myTextBox));
![SimpleCircleAdorner](https://docs.microsoft.com/ko-kr/dotnet/desktop/wpf/controls/media/adorners-overview/simplecircleadorner-textbox.png?view=netframeworkdesktop-4.8)
★마우스 이벤트를 받지 않고 통과시키려면
myAdorner.IsHitTestVisible = false;