- UI 요소에 외형적인 특성을 추가하기 위한 특별한 목정의 사용자 정의 요소이다. 하나의 장식 객체는 자신을 사용하는 요소와 동일한 위치에 나타나지만

Z순서상 가장 위에 나타날 것이다. 즉, 창에서 모든 비장식 요소보도 위에 타나난다. 장식 객체들은 보통 대화명 객체 수정 시나리오에서 선택된 객체의 외곽선을 표시하거나 제어하기 위해 사용된다.

WPF는 Z 순서위에 특별한 AdornerLayer 요소를 생성하기때문에 장식 객체들은 최상위에 나타날수 있다.

 

AdornerLayer 객체는 여러개의 증복된 요소를 폼할수 있기때문에 패널의 일종이라고 생각할수 있다. 그러나 AornerLayer는 FrameworkElement 클래스를 직접 상속하고 있으며 두가지 이유에서 패널로 취급하지 않는다.

  • 패널은 모든 UI요소를 포함할수 있는 반면 이 클래스는 Adorner 클래스 를 상속한 요소만 포함할수 있다.
  • AdornerLayer 클래스는 자신이 장식하는 요소의 위치에 따라 장식 레이어 상에 위치하게 되며, 자신 만의 독자적인 레이아수 로직은 가지고 있지 않다. 이는 장식 객체들은 일반적인 방식의 레이아웃에는 관여 하지 않는 것을 의미한다.

 

Adorner  기반 클래스에서 파생되는 고용 클래스는 존재 하지 않으므로 어쩔수 없이 이 를 상속하여 직접 클래스를 구현해야 한다. 또한, Adorner 클래스는 속성을 통해 그 외형을 정의할수 없기때문에 XAML을 쓸 수 없다.

ex 장식 비주얼 레이어 사용

class BoxingAdorner : Adorner

{

public BoxingAdorner(UIElement adornedElement) : base (adornedElement) {}

 

protected override void OnRender(DrawingContext drawingContext)

{

drawingContext.DrawRectangle(null, new Pen(Brushes.Blue, 2), new Rect(0 , 0, 100, 40));

}

}
ex 장식 객체를 사용하는 예제

//xaml

<Window ..>

<Grid>

<TextBlock x:NAme="targetEelment" Margin="40,40,0,0" Text="안녕하세요"/>

</Grid>

</Window>

//c#

partial class Window1 :Window

{

public Window1()

{

InitializeComponent();

this.Laoded += new RoutedEventHandler(Windwo1_Loaded);

}

void Winodow1_Loaded(object sender, RoutedEventArgs e)

{

AdornerLayer a1 = AdornerLayer.GetAdornerLayer(targetElement);

BoxingAdorner myAdorner = new BoxingAdorner(targetElement);

a1.Add(myAdorner);

}

 

}

 

 

이 글은 스프링노트에서 작성되었습니다.

by 무위자연 2008. 10. 2. 16:27