ContentControl과 ContentPresenter의 차이점은 무엇입니까?
언제 사용해야 할지 모르겠어요.ContentPresenter
대신ContentControl
(및 그 반대).지금 이 순간은ContentControl
거의 항상 내 안에서DataTemplate
s. 언제?ContentPresenter
더 나은 선택일까요?그리고 왜?
ContentControl
다른 요소를 포함하고 있는 컨트롤의 기본 클래스입니다.Content
-syslog(예를 들어,Button
).
ContentPresenter
는 제어 템플릿 내에서 내용을 표시하기 위해 사용됩니다.
ContentControl
직접 사용하는 경우(기본 클래스로 사용되어야 함)에는 ContentPresenter를 사용하여 콘텐츠를 표시하는 컨트롤 템플릿이 있습니다.
나의 경험칙(모든 경우에 적용되는 것은 아닙니다. 당신의 판단을 이용하십시오.)
- 안에서.
ControlTemplate
사용하다ContentPresenter
- 외부
ControlTemplate
(포함)DataTemplate
및 외부 템플릿)을 사용하지 않도록 합니다.필요한 경우,ContentPresenter
- 서브클래스
ContentControl
사용자 정의 "외관 없는" 컨트롤을 만들 때 기존 컨트롤의 템플릿을 변경해도 동일한 결과를 얻을 수 없는 경우(매우 드물 수 있음).
ContentPresenter는 보통 ControlTemplate에서 "실제 콘텐츠를 여기에 저장"하기 위한 플레이스 홀더로 사용됩니다.
Content Control은 템플릿 내에서만 사용할 수 있는 것이 아니라 어디서나 사용할 수 있습니다.할당된 콘텐츠 유형에 대해 정의된 DataTemplate를 선택합니다.
저는 최근 블로그에 이 두 가지 컨트롤에 관한 글을 올렸습니다.
Content Presenter vs Content Control
ContentPresenter.Content Source는 두 클래스의 가장 큰 차이를 만드는 요소입니다.ContentSource 속성은 ControlTemplate 내에서만 의미가 있습니다. ContentSource 속성은 콘텐츠를 매핑해야 하는 TemplateParent 속성을 결정합니다.예를 들어 컨트롤에 종속성 속성이 포함된 경우MyProperty1
, 그러면 그 안에서 다음 항목을 찾을 수 있습니다.ControlTemplate
:
<ControlTemplate TargetType="MyControl" >
[...]
<ContentPresenter ContentSource="MyProperty1" />
[...]
</ControlTemplate>
ContentPresenter의 콘텐츠는 다음 값을 받습니다.MyProperty1
.
자산의 이름이 다음과 같은 경우Content
, 를 지정할 필요가 없습니다.ContentSource
디폴트값이기 때문입니다.
angularJs를 아는 사람들에게 이것은 메카니즘을 초월하는 것과 유사하다.
오래된 질문이지만, 범용 앱용 템플릿인 애니메이션 타일 컨트롤 개발을 막 끝낸 참이었다.이 코드는 이전 Phone WP7/8 SDK에서 볼 수 있다.
<ContentControl x:Name="contentControl" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch">
<ContentPresenter x:Name="contentPresenter" CacheMode="BitmapCache"/>
</ContentControl>
내용 관리: 컨테이너:만, ControlTemplate에 는,ControlTemplate
컨테이너를 수 다른 ContentControl
에서, 그 , 다른 내용을 나타내기 위해서.ContentPresenter
하지 않은 , "용기"를 ControlTemplate
★★★★★★★★★★★★★★★★★」ControlPresenters
적어도 WP7/8 SDK를 개발할 때 마이크로소프트의 남자들이 했던 것처럼 콘텐츠 블록을 표시하는 것.Content Control은 콘텐츠 표시에도 사용할 수 있지만 컨테이너와 프레젠터 역할을 모두 수행합니다.용기의 존재동적 샘플에서는 컨테이너를 표시하고(배경이 비어 있거나 아직 표시되지 않은 것이 있을 수 있음) 프레젠터 콘텐츠로 동적으로 채울 수 있습니다.컨테이너에는 치수(폭, 높이 등)가 있으며, 컨테이너 컨트롤에 해당 속성을 배치하고 컨테이너에 내용을 표시합니다.이 예에서는 ContentControl이 발표자의 콘텐츠에 대해 수행해야 할 작업을 결정합니다.
때로는 예가 이론적인 전문용어보다 쉽다.MS 웹 사이트(아래로 스크롤:http://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter(v=vs.110).aspx),)에서는 버튼을 예로 사용합니다.버튼에는 하나의 컨트롤 또는 이미지, 텍스트, CheckBox, 스택 패널, 그리드 등의 커스텀 컨트롤을 배치할 수 있는 ContentControl이 있습니다.
버튼을 커스터마이즈한 후 Xaml에서 다음을 쓸 수 있습니다.
<my:Button>
<my:Button.Content>
<my:AnotherControl>
</my:Button.Content>
</my:Button>
위의 코드 예에서는 "my:Button.Content"는 ContentControl입니다.AnotherControl은 지정한 ContentPresenter 위치에 배치됩니다.
마찬가지로 TextBox와 TextBlock을 비교하면 TextBox에는 위의 Button 예시와 같이 ContentPresenter를 넣을 수 있지만 TextBlock에는 넣을 수 없습니다.TextBlock에서는 텍스트를 입력할 수 밖에 없습니다.
언급URL : https://stackoverflow.com/questions/1287995/whats-the-difference-between-contentcontrol-and-contentpresenter
'programing' 카테고리의 다른 글
Bash의 단일 대괄호와 이중 대괄호의 차이 (0) | 2023.04.11 |
---|---|
트리거와 DataTrigger의 차이점은 무엇입니까? (0) | 2023.04.11 |
큰 테이블의 VARCHAR 컬럼 크기를 늘릴 때 문제가 발생합니까? (0) | 2023.04.11 |
대소문자를 구분하지 않는 목록 검색 (0) | 2023.04.11 |
Bash에서 어레이를 슬라이스하는 방법 (0) | 2023.04.11 |