2010-04-16 2 views
9

필자는 UserControl에 오버레이 효과를 추가하려고하는데 WPF에서 사용되는 광고자가 무엇인지 알고 있습니다. 그러나 나는 그들이 어떻게 작동하는지에 관해 약간 혼란 스럽다. 나는 adorner 레이어가 WPF 런타임에 의해 암묵적으로 처리된다는 것을 알았고, 항상 사용할 수 있어야한다고 생각했습니다.WPF adorner 레이어는 언제 처음 사용할 수 있습니까?

그러나 코드에서 UserControl의 인스턴스를 만들 때 거기에 adorner 레이어가 없습니다. 다음 코드는 예외적으로 실패합니다.

var view = new MyUserControl(); 
var target = view.GetAdornerTarget(); // This returns a specific UI control. 
var layer = AdornerLayer.GetAdornerLayer(target); 
if (layer == null) 
{ 
    throw new Exception("No adorner layer at the moment."); 
} 

누군가가 내게 어떻게 작동하는지 설명해 주시겠습니까? 먼저 UserControl 인스턴스를 최상위 창에 배치해야합니까? 또는 어떻게 든 레이어를 직접 정의해야합니까? 문서를 파헤쳐도 아무데도 없어졌습니다.

감사합니다.

답변

16

AdornerLayerAdornerDecoratorScrollContentPresenter 클래스 모두에 의해 생성됩니다. 부모가 제어 할 수있는 시각적 트리에 이러한 클래스가 없으면 연결된 AdornerLayer이 없습니다.

당신은 당신의 UserControlAdornerDecorator를 추가 할 수 있습니다,하지만 당신의 AdornersUserControl의 후손 컨트롤의 상단에 있는지 확인합니다.

Window의 기본값은 ControlTemplate이며 AdornerDecorator이므로, UserControl을 창에 추가하면 AdornerLayer이 표시됩니다.

0

모두 코드를 호출하는 위치와 컨트롤이있는 위치에 따라 다릅니다. 제공 한 경우 컨트롤은 InitializeComponent() 메서드를 통해 아직 인스턴스화되지 않았습니다. 실제로 컨트롤을 어딘가에 배치하거나 AdamnerLayer를 가져올 수 있도록 XAML에서 미리 선언해야합니다.