2017-11-28 8 views
0

관찰을 분명히하려고합니다. (나는 Google에서 똑바로 대답을 찾을 수없는 것). 내가 adorners를 사용하여 몇 가지 이미지 편집을하고 있습니다. 내 이미지는 모두 ItemsControl이고, 아이들은 InkCanvas입니다.부모 콘텐츠 컨트롤과 그 자식 사이에는 항상 Adorner Layer가 있습니까?

ItemsControl 내의 요소에 GetAdornerLayer()을 사용하는 경우 ItemsTemplate 내의 요소에 대해 Adorner Layer를 자동으로 가져옵니다. 그러나 비주얼 트리를 VisualTreeHelper으로 추가하면 ItemsControl의 모든 항목 위에 다른 AdornerLayer이 있습니다. ItemsControl은 그 자체가 Grid입니다. 반면에 InkCanvas의 자식에 대해 AdornerLayer에 액세스하면 InkCanvas과 그 자식 사이에있는 adorner 계층을 얻게됩니다.

따라서 두 경우 모두 WPF는 항상 contentcontrol과 그 자식 사이에 adornerlayer를 배치하고있는 것 같습니다.

사실이 경우입니까?

TIA.

답변

1

컨트롤의 ControlTemplates 정의 방법에 따라 다릅니다. AdornerLayer.GetAdornerLayer 메서드는 지정된 Visual에서 시작하는 시각적 트리를 탐색하고 찾은 첫 번째 AdornerDecorator 또는 ScrollContentPresenter 요소의 adorner 레이어를 반환합니다.

그래서 WPF는 자동으로 "contentcontrol과 그 자식 사이에 adornerlayer를 항상 배치"하지 않습니다. 오히려 시각적 트리에 AdornerDecorator을 추가하여 adorner 레이어를 제공하는 컨트롤 작성자입니다.

Window의 기본값이 ControlTemplate 인 경우 실제로는 <AdornerDecorator> 요소가 포함되어 있습니다.