WPF Control Template vs User Control
최근에 UserControl을 만들었는데, 커스텀 종속성 속성 등으로 작업해야 했기 때문에 시간이 꽤 걸렸습니다.
어쨌든, 3가지 컨트롤 중 하나에 불과했습니다.TextBox, 계층 트리가 있는 팝업.
이제 ControlTemplate만 쓸 수 있다는 것을 깨달았습니다.따라서 UserControl을 사용하면 어떤 이점이 있습니까?
여기서 고려해야 할 세 가지 케이스는 UserControl, ControlTemplate 및 Custom Control입니다.(DataTemplate는 설명이 필요 없을 것 같습니다.)
커스텀 컨트롤은 새로운 UI 컴포넌트의 기본 기능을 생성할 때 제공하는 것입니다.여기에는 여러 가지 장단점이 있지만 예를 들어 ItemsControl의 사용자 지정 선택 동작을 원하는 경우 Selector 또는 MultiSelector(wpftoolkit DataGrid는 이를 수행함)를 하위 분류하는 것이 가장 좋습니다.또한 새로운 Dependency Property를 포함하는 개체를 원하는 경우 대부분의 경우 Control에서 파생됩니다.
여기에 포함된 wpf 원칙은 "외관 없는" 제어 패러다임입니다. 즉, "누군가가 당신의 제어를 템플릿화하거나 적어도 자신의 템플릿 시나리오에서 적절하게 동작하도록 해야 합니다."커스텀 컨트롤은 일반적으로 재사용 가능성을 염두에 두고 작성되며, 프레임워크 dll의 일부로 작성되는 경우가 많습니다.
ControlTemplate는 기본적으로 대체 비주얼 트리에 대한 설명이며 FrameworkElements에서 명시적으로 설정하거나 스타일의 일부로 설정할 수 있습니다.이것은 주로 어플리케이션을 만들고 그것을 끝내는 것이 목표일 때 목표로 삼아야 할 옵션입니다.바인딩과 트리거(및 Style 자체를 포함할 수도 있음)를 올바르게 가져올 수 있다면 ControlTemplate를 사용하여 거의 모든 작업을 시각적으로 수행할 수 있습니다.이 모든 것을 재사용된 리소스로 선언하여 애플리케이션에 공통의 "테마"를 제공할 수 있습니다.
UserControl은 설계자에서 개별적으로 편집 가능한 부품이 있는 자체 포함 복합 컨트롤로, 설계자에서 구성 요소를 보고 관리해야 할 때 가장 적합합니다.반면 ControlTemplate는 디자이너에서 조작하기 위해 컴포넌트를 노출하지 않습니다(표시되지만).일반적으로 UserControl for Customer details 페이지, Product Display Browser 또는 완전한 Control을 작성하지 않고 디자이너의 지원을 받아 상세 보기를 원하는 경우 작성합니다.
여기서 특별한 경우는 MVVM 패턴을 사용하는 경우입니다.많은 뛰어난 MVVM 구현에서는 UserControls를 Views로 사용하고 ControlTemplates 및 Styles를 이러한 뷰에서 사용하는 리소스로 사용합니다.또한 MVVM 프랙티스는 커스텀 제어의 필요성을 최소화하고 다른 많은 이점을 제공합니다.
(MVVM에 대한 자세한 내용은 Google for Josh Smith, Sacha Barber 및 Karl Shifflett의 환상적인 기사를 참조하십시오.)
고유한 종속성 속성을 추가하는 경우 종속성 속성을 정의하는 데 사용할 고유한 클래스가 필요합니다.
클래스에 템플릿을 적용할 때 이 커스텀클래스는 다음에서 파생되어야 합니다.Control
(과 같이)UserControl
하고 있습니다).
직접 글을 쓰는 것의 주요 장점Control
- derived class는 다른 사용 시나리오에 맞게 템플릿을 재정의할 수 있습니다(앱 내 사용자 또는 해당 유형의 다른 사용자).
를 사용하는 데 드는 오버헤드는 거의 없습니다.UserControl
사실 리플렉터에서 보면요.NET, 코드가 거의 없는 것을 알 수 있습니다.주로,UserControl
일부 기존 종속성 속성(기본값 설정 등)의 메타데이터를 재정의할 뿐입니다.FocusableProperty
false
.)
컨트롤 템플릿을 즉시 재정의할 필요가 없는 한 이 템플릿을 그대로 둘 수 있습니다.UserControl
나중에 필요에 따라 변경할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1131106/wpf-controltemplate-vs-usercontrol
'programing' 카테고리의 다른 글
Excel 시트에서 변수로 행 번호 전달 (0) | 2023.04.16 |
---|---|
Python을 사용하여 목록의 값 바꾸기 (0) | 2023.04.16 |
공개 리포트에서 이전 Git 커밋으로 롤백 (0) | 2023.04.16 |
localhost Windows에서 포트 80을 해방하려면 어떻게 해야 하나요? (0) | 2023.04.11 |
Git - Windows에서 .netrc 파일을 사용하여 사용자와 비밀번호를 저장하는 방법 (0) | 2023.04.11 |