본문 바로가기

WPF

[WPF] ControlTemplate과 ContentPresenter


우리는 로봇 장난감을 가지고 있습니다. 이 로봇은 기본적인 모습을 가지고 있지만, 우리들이 옷을 바꾸거나 손에 무엇을 들려줄 수 있어요. ControlTemplate은 로봇이 어떻게 생겼는지를 결정해요. 모자를 쓰게 하거나, 검을 들게 하거나, 심지어 망토를 입힐 수도 있어요. 모두 여러분의 상상력에 달려 있어요!

ContentPresenter는 로봇의 손에 다른 것들을 넣을 수 있는 공간과 같아요. 오늘은 로봇이 장난감 자동차를 들고 있고, 내일은 아이스크림을 들고 있을 수 있어요. ContentPresenter는 로봇의 옷(템플릿)을 바꿀 때마다, 손에 들고 있는 것(내용)을 쉽게 바꿀 수 있게 해줘요.



이제 이 개념들을 좀 더 기술적으로 깊게 이해해볼게요.

ControlTemplate
XAML 기반 애플리케이션(예: WPF, UWP, Xamarin.Forms)에서 ControlTemplate은 컨트롤의 시각적 구조와 외관을 정의합니다. 단순한 스타일링을 넘어서 컨트롤의 모습을 완전히 변경할 수 있는 방법이죠. 예를 들어, Button 컨트롤은 일반적으로 간단한 모습을 가지고 있지만, ControlTemplate을 사용하면 이를 완전히 새롭게 정의할 수 있으며, 이미지, 도형 등 새로운 요소를 포함시킬 수 있습니다.

C# 예제:

<Button x:Name="MyButton">
    <Button.Template>
        <ControlTemplate TargetType="Button">
            <Border Background="{TemplateBinding Background}"
                    CornerRadius="5">
                <ContentPresenter HorizontalAlignment="Center"
                                  VerticalAlignment="Center"/>
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

이 예제에서는 Button에 대한 ControlTemplate를 정의하며, 이는 둥근 모서리를 가진 Border 요소로 구성됩니다. 내부의 ContentPresenter는 버튼의 내용(텍스트 등)이 가운데에 위치하도록 합니다.

ContentPresenter
ContentPresenter는 ControlTemplate 내에서 컨트롤의 내용을 표시하는 부분을 담당합니다. 템플릿 내에서 동적 컨텐츠, 예를 들어 텍스트나 다른 컨트롤들이 어떻게 표시될지를 지정하는 데 사용됩니다. 정렬, 마진, 템플릿 등의 컨텐츠 속성을 지원합니다. 본질적으로, ContentPresenter는 템플릿 내에서 동적 내용을 위한 자리 표시자로 볼 수 있습니다.

'WPF' 카테고리의 다른 글

[WPF] DataContext 란  (0) 2024.04.23
[WPF] CustomControl 스타일 정의 코드 분석  (0) 2024.04.21
[WPF] DefaultStyleKeyProperty란  (0) 2024.04.19
[WPF] Control 과 ContentControl  (0) 2024.04.09