[WPF] PART로 네이밍을 하는 경우

TabControl 스타일 및 템플릿 - WPF .NET Framework | Microsoft Docs

Naming of WPF-Controls in Markup - Stack Overflow

여기에 예시가 있지만 WPF를 전문적으로 다루시는 분들을 보면 종종 접두사로 **PART_**라는 네이밍을 볼 수 있고 컨트롤 네임은 아니지만 주로 Style 관련해서 저렇게 네이밍 되는 경우를 볼 수 있습니다.

어떤 경우에 WPF 에서 PART_ 를 붙여서 네이밍하는 건가요?

2개의 좋아요

접두사 'PART_'는 사용자 컨트롤에서중에서 미리 정해진 컨트롤의 요소를 지칭하는데 쓰입니다.

통상 네이밍 규칙을 앞에 접두어로 'PART_'로 시작하도록 네이밍 하고 있고

이 네이밍은 사용자 컨트롤의 TemplatePart 어트리뷰트를 이용해서 지정할 수 있습니다.

이렇게 지정된 해당 요소의 이름은 ControlTemplate안에서 미리 지정된 이름을 사용해서 자유롭게 꾸밀 수 있는 것 입니다.

가령 WPF의 기본 ComboBox 컨트롤은
TextBox컨트롤의 ‘PART_EditableTextBox’ 와 Popup컨트롤의 ‘PART_Popup’ 두개의 조합으로 구성 되어 있습니다.

그래서 ComboBox의 ControlTemplate을 재 정의 해서

미리 정의되어 있는 ‘PART_EditableTextBox’ ‘PART_Popup’ 두개 요소 컨트롤을 자유롭게 위치를 정하거나 스타일을 해서 원하는 디자인으로 처리 할 수 있습니다.


이렇게 사용할때의 이점은 새로운 ComboBox를 다시 만들 필요 없이 'PART_EditableTextBox' 'PART_Popup' 요소만 새롭게 꾸며서 원래의 기능 역할은 그대로 사용하고 디자인만 새롭게 꾸밀 수 있습니다.
9개의 좋아요

@aroooong 좋은 설명 감사합니다!

@Vincent 그리고 DatePicker를 예를들면

OnApplyTemplate()
{
    TextBox txt =GetTemplateChild(“PART_TextBox”);
    Button btn = GetTemplateChild(“PART_Button”);
    Popup pop = GetTemplateChild(“PART_Popup”);
}

이런식으로 구현되어있는데

코드에서 처리해야할 부분을 OnApplyTemplate을 통해서 ContentTemplate에 접근할 수 있습니다.

그래서 PART_ 이름이 보이면
OnApplyTemplate 등을 통해 코드에서 접근한다 생각해주시면 됩니다.

그래서 혹시라도 커스텀 컨트롤을 생성해서 OnApplyTemplate을 재정의(override)한다면 base.OnApplyTemplate을 지우지 않으시는게 좋습니다. :smile:

7개의 좋아요