2009-12-22 2 views
5

우리 작업에서는 레이블 및 텍스트 상자, 레이블 및 이미지 컨트롤과 같이 자주 사용되는 컨트롤을 결합하는 사용자 컨트롤을 만들려는 사람들이있는 곳에 논란이 있습니다.언제 WPF에서 UserControl을 추출해야합니까?

<StackPanel Orientation="Horizontal"> 
    <Image Source="/Someimage/Somewhere.gif"/> 
    <Label>Some text, hyperlink, or other content</Label> 
</StackPanel> 

과 그들이 별도의 사용자 제어를받을만한 충분한 캡슐화 및 추상화를 제공하는 경우 문제는이

<ImageLabel 
    HeaderImageSource="/Someimage/Somewhere.gif" 
> 
    Some text, hyperlink, or other content 
</ImageLabel> 

처럼 사용 : 즉,이 같은 것입니다?

답변

3

네, 제 의견으로는 별도의 사용자 정의 컨트롤을 만드는 것으로 충분합니다 - 사용자 컨텍스트에서 논리적 구성 요소를 형성하는 경우. 우리가 재사용하고 싶은 컴포넌트들을 그룹화했다면 우리가 작업하고있는 프로젝트에서 사용자 컨트롤을 생성합니다.

주요 이점은 구성 요소의 구조와 스타일을 제어 할 수 있다는 것입니다. 어딘가에서 변화를 원할 경우를 생각해보십시오. 예 : 이미지 주위에 테두리를 추가하거나 레이블에 스타일을 추가하십시오. 반복되는 구성 요소 그룹의 모든 항목을 찾기 위해 코드를 탐색하고 싶지는 않습니다. 대신 -이 한 곳만 업데이트하려는 경우 - 즉 분리 한 맞춤 구성 요소를 업데이트해야합니다.

다른 장점은 구성 요소를 동일한 개체에 바인딩하려는 경우입니다. 그런 다음 ImageLabel을 객체에 바인딩 할 수 있으며 구성 요소는 멋지고 깨끗한 방법으로이 객체 내의 속성에 직접 바인딩 할 수 있습니다.

참고 : 실제로이 구성 요소를 다시 사용하고 응용 프로그램을 통해 동일한 방식으로 구조화 및 스타일을 지정하려고한다고 가정합니다. 난 단 한 번만 사용하기 위해이 간단한 사용자 컨트롤을 만들지 않을 것입니다.

+1

스타일은 그렇게하지 않습니까? –

+0

예, 스타일을 사용하여 개별 구성 요소가 동일하게 보이도록 할 수 있지만 각 구성 요소의 스타일 참조를 업데이트해야합니다. 실제로 어디서나 동일하게 보이게하려면 하나의 논리적 구성 요소로 사용자 정의 컨트롤을 만들어야합니다. 예 : 라벨의 스타일을 바꾸지 만 다른 것들과는 다른이 "구성 요소"가 한 번 나타나면 업데이트하는 것을 잊지 마십시오. 나는 분리 된 구성 요소를 만드는 것이 더 깨끗하다는 것을 알았다. 하지만 다시. 어떻게 든 실제로 논리적으로 묶여 있다면. – stiank81

+0

컨트롤은 이미지가 레이블과 함께 사용되어야하는 곳이면 어디든 일반적인 솔루션으로 제안됩니다 –

2

세 개의 컨트롤에 대한 UserControl을 만들기 위해 약간의 잔인 함이 보입니다. 나는 그것이 캡슐화/추상화보다는 시간과 노력을 절약했는지 여부를 고려해 보았습니다.

관련 문제