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));
★마우스 이벤트를 받지 않고 통과시키려면
myAdorner.IsHitTestVisible = false;
'.NET > WPF' 카테고리의 다른 글
WPF ContextMenu Tips (0) | 2021.08.15 |
---|---|
WPF CustomControl (0) | 2021.08.15 |
WPF Graphics Rendering (0) | 2021.08.15 |
Routed Event (0) | 2021.08.15 |
ScrollViewer Tips (0) | 2021.08.15 |