사용자 제어 라이브러리와 사용자 정의 제어 라이브러리의 차이점은 무엇입니까?


168

WPF 속도를 높이고 재사용 가능한 WPF 컨트롤을 만들고 싶습니다.

Visual Studio에서 프로젝트를 만들기위한 옵션을 보면 "WPF 사용자 컨트롤 라이브러리"및 "WPF 사용자 지정 컨트롤 라이브러리"가 표시됩니다. 그들 사이의 차이점과 내 Google 검색이 적절한 설명을하지 않은 것은 분명하지 않습니다.

나는 그들 사이의 차이점을 이해하고 이상적으로 사용하는 경우의 예를 이상적으로보고 싶습니다.


2
콘텐츠 중첩 또는 컨트롤 템플릿을 옵션으로 변경하는 것을 잊지 마십시오. 사용자 정의 컨트롤을 작성하지 않고도 이러한 방식으로 컨트롤을 대폭 변경할 수 있습니다.
MichaC 2009

MichaC가 말한 것. WPF의 가장 중요한 부분은 기존 컨트롤을 템플릿 화하는 데 큰 영향을 줄 수 있다는 것입니다. 사용자 지정 컨트롤이 거의 필요하지 않습니다. 컨트롤을 약간만 변경하더라도 새로운 파생 컨트롤이 필요한 WinForms와는 다릅니다.
Mikko Rantanen

여전히 유용합니다. 또 다른 금 배지를 갖습니다.
ouflak

답변:


117

실제로 사용자 지정 컨트롤은 코드 수준에서 구현하는 반면 사용자 컨트롤에는 XAML을 사용할 수 있습니다. 사용자 지정 컨트롤은 WPF 컨트롤 기본 클래스 중 하나를 확장하고 코드를 통해 추가 기능을 제공하므로 추가 된 모든 논리 및 표현을 코드 내에 구현해야합니다.

사용자 정의 컨트롤은 기술적으로 일반적인 콘텐츠 컨트롤로 코드의 일부 부분에서 확장 할 수 있지만 일반적으로 그 안에 다른 컨트롤을 배치하여 확장됩니다. Kent가 언급했듯이 UserControl은 다른 컨트롤의 집합입니다. 이것은 사용자 컨트롤로 할 수있는 일을 상당히 제한합니다. 사용하기가 쉽지만 완전한 사용자 지정 컨트롤보다 제한적입니다.

이러한 컨트롤은 런타임 관점과 약간 다릅니다. 응용 프로그램을 빌드하고 UserControl을 응용 프로그램에 배치 할 때 제어 트리에는 그 안에 구체적인 UserControl 템플릿이 있습니다. 우리가 특수 버튼의 절름발이 예를 고려한다면. 사용자 정의 컨트롤을 사용하는 경우 <UserControl>요소 안에 버튼을 추가합니다 . 사용자 정의 컨트롤을 사용할 때 가장 가능성이 큰 버튼에서 컨트롤 자체를 파생시킵니다. 차이점은 논리 트리에서 볼 수 있습니다.

사용자 정의 컨트롤은 다음과 유사한 논리 트리를 제공하지만

  • 창문
    • CustomButton

UserControl은 논리 트리를 제공합니다.

  • 창문
    • CustomButtonUserControl
      • 단추

결국 UserControl은 일반적인 ContentControl 일 뿐이며 약간 확장 할 수 있고 콘텐츠를 미리 정의 할 수 있습니다. XAML의 이점을 얻는 대신 코드에서 모든 논리와 상호 작용을 수행해야하므로 사용자 지정 제어는 구현이 쉬워 진 가격으로 유연성을 제공합니다.

그럼에도 불구하고 Visual Studio 템플릿에는 큰 차이가 없다고 생각합니다. Visual Studio 사용자 지정 컨트롤은 빈 사용자 지정 컨트롤이있는 프로젝트를 만드는 반면 사용자 컨트롤 프로젝트는 빈 사용자 컨트롤이있는 프로젝트 일 가능성이 높습니다. 나중에 프로젝트에 모든 종류의 항목을 추가 할 수 있습니다.

최신 정보

사용자 정의 컨트롤과 사용자 컨트롤을 사용하는 시점에 대한 나의 의견은 사용자 컨트롤로 무언가를 할 수 있고 논리 트리의 추가 컨트롤 요소가 당신을 귀찮게하지 않으면 사용자 컨트롤을 사용하기가 훨씬 쉽다는 것입니다 만들고 유지하십시오. 사용자 정의 컨트롤을 사용하지 않는 이유가있는 경우에만 사용자 정의 컨트롤을 사용하십시오.


2
사용자 지정 컨트롤을 사용하여 다른 컨트롤을 집계 할 수 있습니까?
26

그리고 스킨 가능한 / 템플릿 가능한 문제는 어떻습니까?
26

1
집계하여 무슨 뜻인지 확실하지 않습니다. 다른 컨트롤을 집계하여 사용자 지정 컨트롤을 만들 수 없습니다. 그러나 StackPanel, Grid 또는 Panel 자체와 같은 Panel 컨트롤에서 파생 할 수 있으므로 사용자 지정 컨트롤을 사용하여 레이아웃 컨테이너를 구현할 수 있습니다 (사용자 정의 컨트롤로 할 수 있는지 확실하지 않음).
Mikko Rantanen

예, 그러나 다른 컨트롤을 집계하려는 경우 사용자 컨트롤을 사용하는 것이 훨씬 쉽습니다. 사용자 정의 제어를 수행하려는 작업에 따라 실제로 작성하기가 어려울 수 있으므로 기능의 서브 세트 만 제공하더라도 사용자 정의 제어를 사용하도록 선택하는 이유입니다.
MichaC

1
올바른 방법으로 구현할 때 이러한 컨트롤은 모두 스킨 가능 / 템플릿 가능해야합니다. 불행히도 내 WPF 참조는 현재 사무실에 있으므로 구현 세부 정보를 확인할 수 없습니다.
Mikko Rantanen

23

A Control는 스킨 가능 (템플릿 가능) 인 일부 동작을 나타내는 반면, a UserControl는 일반적으로 Control응용 프로그램에 고유 한 상위 레벨 집계입니다 .

자세한 내용은 여기를 참조하십시오 .


3
그것은 내가 잘 알지 못하는 링크 중 하나입니다 :). 필자가 누락 된 것은 스킨 가능 / 템플릿 가능이 실제로 의미하는 것과 사용자 정의 컨트롤로 수행 할 수없는 이유라고 생각합니다. 또한 링크 된 게시물의 마지막 문장은 "일반적으로 간단히 말해서 사용자 지정 컨트롤은 사용자 컨트롤보다 유연성과 재사용 성이 더 좋습니다"입니다. 이것이 사실이라면 왜 사용자 정의 컨트롤을 만들고 싶습니까?
26 중 17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.