삽질의 현장/- .NET

#112_닷넷(.NET)_ WPF_ 컨트롤 템플릿(Control Template)

shovelman 2015. 12. 6. 16:25


안녕하세요 삽잡이입니다.


이번 시간에는 컨트롤 템플릿에 대해서 알아보려고합니다.


컨트롤 템플릿이란,

컨트롤이 가지고 있는 외형을 완벽하게 변화시킬 수 있다는 개념입니다.

이전에 이름이 비슷한 DataTemplate에 대해서 배웠던 기억이 나시지 않습니까!?


그런데 이 둘은 전혀 다른 개념입니다.

Template은 '틀'을 의미하는데,

ControlTemplate의 경우 컨트롤 외간의 틀을 의미합니다.

즉, 어떻게 화면상에 보여줄것인지에 대한 틀을 설명하는 것이지요.


DataTemplate은 ListBox를 생각해보시면 됩니다.

내부에 ListBox 아이템들이 어떻게 보여질지에 대해서 결정할 때

즉, 컨트롤 외간이 아니라, 

ListBox 내부에 들어있는 아이템이 보여지는 방식!? 틀!?

이 정도로 생각하시면 됩니다.

ListBox 내에 ListBoxItem이라는 내용물들이 자리를 잡을 때

어떻게 보여줄지에 대한 정의를 뜻한다는 것이지요.


아무튼...


 

버튼이라는 템플릿 아래에 요소로써 ControlTemplate이 보입니다.

ControlTemplate 아래 정의된 형태로 보여지게 되지요.


버튼은 ContentControl 형식입니다.

특별한 녀석이 아니라면, 대부분의 컨트롤들은 모두 ContentsControl 형식이지요.

아무튼...

자신의 콘텐츠를 컨트롤이 가질 수 있다는 형식으로써,

ContentPresenter 요소를 없애게 되면, 그 내부에 있는 콘텐츠들이 안보입니다.


즉, 버튼의 외관이 콘텐츠가 되는 것입니다.

외관이 바뀌면 자신의 콘텐츠가 어디에 놓일지 정의를 해야하는데,

ContentPresenter를 통해 정의를 하는 것이지요.

쉽게 생각해보면, 콘텐츠가 보여지는 위치를 결정하는 것입니다.


아하! 컨트롤이 콘텐츠를 갖게되면, 

반드시 ContentPresenter가 필요하다는 사실을 알았습니다.


WPF는 스타일만 변경해도 굉장히 많은 변화가 가능합니다.

즉, 속성들을 가지고도 많은 변화를 시킬 수 있다 이겁니다.

콘텐츠 모델만으로도 외관을 잘 변화시킬 수 있고,

이 말은 콘텐츠 모델은 자기 자신의 콘텐츠를 

자신이 원하는 형태로 갖을 수 있다는 것이죠.

그리고 ContentPresenter를 통해 외관을 변화시킬 수도 있는 것이구요!


사용자 정의 컨트롤은 잘 사용할 일이 없겠군요...



지금까지 간략하게,

Control Template에 대해서 알아봤습니다.


이상 삽잡이였습니다!