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 |