2009-06-08 4 views
1

저는 WPF를 처음 사용하고 컨트롤을 수정하는 데 의의가 있습니다. 나는 제어 템플릿을 변경하여 컨트롤을 수정할 수 있다는 것을 알게되었습니다. 즉,컨트롤 템플릿을 변경하여 컨트롤을 수정하는 것과 하위 컨트롤을 추가하는 것의 차이점

<Button> 
    <Button.Template> 
    <ControlTemplate> 
     ... 
    </ControlTemplate> 
    </Button.Template> 
</Button> 

또한 우리는 컨텐츠 모델을 이용하여 컨트롤을 편집 할 수 있습니다. 즉,

<Button> 
    <Grid> 
    <CheckBox> 
    </CheckBox> 
    <RadioButton> 
    </RadioButton> 
    ... 
    </Grid> 
</Button> 

이 두 기술의 차이점은 무엇입니까? WPF에서 컨트롤을 사용자 지정하는 올바른 방법은 어느 것입니까? 이 점을 더 잘 이해하도록 도와주세요.

답변

3

두 가지 주요 차이점은 ControlTemplate이 컨트롤 모양을 정의한다는 것입니다. 실제로 내용을 내부에 배치하지는 않습니다. 콘텐츠 컨트롤 내의 일부 위치에는 ContentPresenter의 형식이 있어야합니다. 내장 된 컨트롤은 'lookless controls'으로 알려져 있기 때문에이 기능을 사용할 수 있으며 만든 모든 사용자 지정 컨트롤도 보이지 않아야합니다. 컨트롤이 깔끔한 방식으로 템플릿 화되지 않고 대신 정적 레이아웃이있는 경우 실행 한 혼동이 발생할 수 있습니다.

올바른 방법은 일을 수행하는 방법이며, 달성하려는 대상에 따라 다릅니다. 모양과 느낌 또는 동작과 같은 컨트롤을 변경하려는 경우 using a ControlTemplate (또는 템플리트에 따라 DataTemplate)을 사용하는 것이 좋습니다. 이것의 좋은 예가 CheckBox입니다. 실제로는 CheckBox가 실제로 ToggleButton (more or less)이며, through templating은 총알에 불건전 메시지를 표시합니다. Here's 템플릿을 사용하여 아주 멋진 일을하는 또 다른 좋은 예입니다.

ControlTemplates는 요소에 직접 설정하는 대신 applied through Styles이어야합니다.

실제로 컨트롤의 모양이나 동작을 수정하지 않으려는 경우 콘텐츠 모델을 사용하는 것이 올바른 방법입니다.

WPF does this better then Silverlight 비록 SL3에 개선이 있는지 모르겠지만.

0

템플릿을 리소스에 배치하고 다른 버튼에 다시 사용할 수 있습니다.

직접 내용을 변경하면 UserControl을 만들지 않는 한 다시 사용할 수 없습니다.

당신이 사용하는 것은 구체적인 작업과 개인 취향에 달려 있습니다.

+0

컨트롤의 내용은 요소를 리소스로 정의하고 ContentControls를 사용하거나 내용을 DataTemplate로 할당하여 다시 사용할 수 있습니다. – rmoore

+0

ContentControl 또는 DataTemplate을 사용하면 원본 질문에서 # 2와 같지 않을 것입니다. –

1

제 경험에 비추어 볼 때, 컨트롤 템플릿을 변경하지 않고 원하는 것을 얻을 수 있다면 컨트롤 템플릿을 변경하면 안됩니다.

컨트롤 템플릿은 컨트롤의 느낌을 변경하는 방법입니다. 예를 들어 확인란의 체크 마크 그래픽을 변경하는 둥근 버튼을 만듭니다.

컨트롤 안에 컨트롤을 추가하는 것이 더 간단합니다. 예를 들어 버튼 안에 이미지를 배치하는 것입니다.

제어 템플릿을 변경하면 패딩, 콘텐츠 정렬, 사용 중지 된 모양 등 많은 기능이 추가된다는 것을 기억하십시오. 모든 기능에 대한 지원을 추가해야합니다.